1 ; **************************************************************************** 2 ; sinus12.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 07/03/2021 6 ; 7 ; **************************************************************************** 8 ; nasm sinus12.s -l sinus12.txt -o SINUS12.PRG -Z error.txt 9 ; (modified from 'sinus4.s', 19/02/2021) 10 11 ; Draw sinus wave/curve by using 'sysvideo' bx=0305h 12 ; (640*480, 32 bit true color version) 13 14 ; 14/07/2020 15 ; 31/12/2017 16 ; TRDOS 386 (v2.0) system calls 17 _ver equ 0 18 _exit equ 1 19 _fork equ 2 20 _read equ 3 21 _write equ 4 22 _open equ 5 23 _close equ 6 24 _wait equ 7 25 _create equ 8 26 _rename equ 9 27 _delete equ 10 28 _exec equ 11 29 _chdir equ 12 30 _time equ 13 31 _mkdir equ 14 32 _chmod equ 15 33 _rmdir equ 16 34 _break equ 17 35 _drive equ 18 36 _seek equ 19 37 _tell equ 20 38 _memory equ 21 39 _prompt equ 22 40 _path equ 23 41 _env equ 24 42 _stime equ 25 43 _quit equ 26 44 _intr equ 27 45 _dir equ 28 46 _emt equ 29 47 _ldrvt equ 30 48 _video equ 31 49 _audio equ 32 50 _timer equ 33 51 _sleep equ 34 52 _msg equ 35 53 _geterr equ 36 54 _fpstat equ 37 55 _pri equ 38 56 _rele equ 39 57 _fff equ 40 58 _fnf equ 41 59 _alloc equ 42 60 _dalloc equ 43 61 _calbac equ 44 62 _dma equ 45 63 64 %macro sys 1-4 65 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 66 ; 03/09/2015 67 ; 13/04/2015 68 ; Retro UNIX 386 v1 system call. 69 %if %0 >= 2 70 mov ebx, %2 71 %if %0 >= 3 72 mov ecx, %3 73 %if %0 = 4 74 mov edx, %4 75 %endif 76 %endif 77 %endif 78 mov eax, %1 79 ;int 30h 80 int 40h ; TRDOS 386 (TRDOS v2.0) 81 %endmacro 82 83 ; Retro UNIX 386 v1 system call format: 84 ; sys systemcall (eax) , , 85 86 [BITS 32] ; We need 32-bit intructions for protected mode 87 88 [ORG 0] 89 90 START_CODE: 91 ; clear bss 92 00000000 BF[74070000] mov edi, bss_start 93 00000005 B900080000 mov ecx, (bss_end - bss_start)/4 94 ;xor eax, eax 95 0000000A F3AB rep stosd 96 97 ; program message 98 0000000C BE[A5010000] mov esi, program_msg 99 00000011 E8BF000000 call print_msg 100 101 00000016 30E4 xor ah, ah 102 ;int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY 103 ; Return: AH = scan code, AL = character 104 00000018 CD32 int 32h ; TRDOS 386 Keyboard interrupt 105 106 ; Get VESA VBE video bios number 107 ; (vbe2 or vbe3, emulator or not) 108 ;mov ebx, 0906h 109 ;sys _video 110 111 ; get [truecolor] status (24bpp or 32bpp for VBE3 vbios) 112 0000001A BB09090000 mov ebx, 0909h 113 sys _video 65 <1> 66 <1> 67 <1> 68 <1> 69 <1> %if %0 >= 2 70 <1> mov ebx, %2 71 <1> %if %0 >= 3 72 <1> mov ecx, %3 73 <1> %if %0 = 4 74 <1> mov edx, %4 75 <1> %endif 76 <1> %endif 77 <1> %endif 78 0000001F B81F000000 <1> mov eax, %1 79 <1> 80 00000024 CD40 <1> int 40h 114 115 00000026 B912010000 mov ecx, 112h ; VESA VBE video mode (640x480, 24bpp) 116 117 ;cmp ah, 3 118 ;je short set_vmode 119 ;cmp ah, 2 120 ;;jne terminate ; invalid !? 121 ;jne short set_vmode 122 ;and al, al 123 ;jz short set_vmode ; invalid !? (AL must be >= C0h.) 124 125 0000002B 3C20 cmp al, 32 126 0000002D 7402 je short set_vmode 127 128 ; VBE2 bios or default truecolor bpp is 24 bpp 129 ; so, we are using video mode 142h 130 ; (TRDOS 386 running in emulator or very old hardware!) 131 132 ; BOCHS/QEMU/VBOX emulator 133 0000002F B142 mov cl, 42h ; Bochs/Plex86 video mode 142h 134 ; (640*480, 32bpp) 135 136 ; Set Video Mode to 112h ; 640x480, 32 bit true colors 137 ; 138 ; NOTE: NVIDIA GEFORCE FX 5500 VIDEO BIOS uses 32bpp 139 ; instead of 24bpp for same VBE video mode numbers. 140 ; So, 112h is 640*480, 24bpp for BOCHS/QEMU emulator 141 ; but, it is 640*480, 32 bpp for real computer 142 ; with NVIDIA graphics card and video bios. 143 ; (Also it is -it must be- 32bpp for other new hardware.) 144 145 ;sys _video, 08FFh, 112h 146 set_vmode: 147 ; ecx = VESA VBE video mode 148 sys _video, 08FFh 65 <1> 66 <1> 67 <1> 68 <1> 69 <1> %if %0 >= 2 70 00000031 BBFF080000 <1> mov ebx, %2 71 <1> %if %0 >= 3 72 <1> mov ecx, %3 73 <1> %if %0 = 4 74 <1> mov edx, %4 75 <1> %endif 76 <1> %endif 77 <1> %endif 78 00000036 B81F000000 <1> mov eax, %1 79 <1> 80 0000003B CD40 <1> int 40h 149 0000003D 09C0 or eax, eax 150 ;jz short terminate 151 ;mov [LFB_ADDR], edx ; pointer to LFB info table/structure 152 0000003F 750E jnz short set_vesa_mode_112h_ok 153 154 terminate: 155 00000041 E858010000 call set_text_mode 156 sys _exit 65 <1> 66 <1> 67 <1> 68 <1> 69 <1> %if %0 >= 2 70 <1> mov ebx, %2 71 <1> %if %0 >= 3 72 <1> mov ecx, %3 73 <1> %if %0 = 4 74 <1> mov edx, %4 75 <1> %endif 76 <1> %endif 77 <1> %endif 78 00000046 B801000000 <1> mov eax, %1 79 <1> 80 0000004B CD40 <1> int 40h 157 halt: 158 0000004D EBFE jmp short halt 159 160 set_vesa_mode_112h_ok: 161 0000004F C705[6C070000]0000- mov dword [color], 0FF0000h ; initial pixel color 161 00000057 FF00 162 _0: 163 00000059 E888000000 call drawsinewave 164 waitforkey: 165 ;mov ah, 1 166 ;int 32h 167 ;jz short getkey 168 ;inc word [counter] 169 ;nop 170 ;nop 171 ;nop 172 ;jmp short waitforkey 173 getkey: 174 0000005E 30E4 xor ah, ah 175 00000060 CD32 int 32h 176 177 00000062 663D032E cmp ax, 2E03h 178 00000066 74D9 je short terminate 179 00000068 3C1B cmp al, 1Bh ; ESC key 180 0000006A 74D5 je short terminate 181 182 0000006C 3C2B cmp al, '+' 183 0000006E 7509 jne short _1 184 185 00000070 8305[6C070000]20 add dword [color], 20h 186 00000077 EBE0 jmp short _0 187 _1: 188 00000079 3C2D cmp al, '-' 189 0000007B 7509 jne short _2 190 191 0000007D 832D[6C070000]20 sub dword [color], 20h 192 00000084 EBD3 jmp short _0 193 _2: 194 00000086 3C20 cmp al, 20h ; space 195 00000088 750C jne short _3 196 0000008A 8105[6C070000]2020- add dword [color], 2020h 196 00000092 0000 197 00000094 EBC3 jmp short _0 198 _3: 199 00000096 80FC4B cmp ah, 4Bh 200 00000099 7507 jne short _5 201 ; left arrow 202 _4: 203 0000009B E8EC000000 call beep 204 000000A0 EBBC jmp waitforkey 205 _5: 206 000000A2 80FC4D cmp ah, 4Dh 207 000000A5 7502 jne short _6 208 209 ; right arrow 210 000000A7 EBF2 jmp short _4 211 _6: 212 000000A9 80FC50 cmp ah, 50h 213 000000AC 7502 jne short _7 214 ; down arrow 215 000000AE EBEB jmp short _4 216 _7: 217 000000B0 80FC48 cmp ah, 48h 218 000000B3 7502 jne short _8 219 ; up arrow 220 000000B5 EBE4 jmp short _4 221 _8: 222 000000B7 663D0D1C cmp ax, 1C0Dh 223 000000BB 7511 jne short _9 224 000000BD E8CA000000 call beep 225 000000C2 8105[6C070000]1010- add dword [color], 1010h 225 000000CA 0000 226 000000CC EB8B jmp short _0 227 _9: 228 000000CE E8B9000000 call beep 229 000000D3 EB89 jmp waitforkey 230 231 print_msg: 232 000000D5 B40E mov ah, 0Eh 233 000000D7 BB07000000 mov ebx, 7 234 ;mov bl, 7 ; char attribute & color 235 p_next_chr: 236 000000DC AC lodsb 237 000000DD 08C0 or al, al 238 000000DF 7404 jz short p_retn ; retn 239 000000E1 CD31 int 31h 240 000000E3 EBF7 jmp short p_next_chr 241 p_retn: 242 000000E5 C3 retn 243 244 drawsinewave: 245 ; INPUT: 246 ; sinustable 247 ; 248 ; Modified registers: esi, edi, eax, ecx, ebx, edx 249 250 ; fill _fx table by using sine wave table 251 ; x = 0 to 639 252 ; y = +200 to -200 253 ; +200 --> 399 -> screen row position = (400-399)+39 = 40 254 ; -200 --> 0 -> screen row position = (400-0)+39 = 439 255 256 000000E6 BE[6B020000] mov esi, sinustable 257 000000EB BF[74070000] mov edi, _fx 258 ;xor eax, eax 259 000000F0 29DB sub ebx, ebx ; 0 ; x 260 000000F2 31ED xor ebp, ebp ; pixel count 261 262 ;xor eax, eax 263 ;lodsw ; ax = 400-y value 264 265 ;;;; start of curve continuity code 266 267 000000F4 66AD lodsw 268 000000F6 EB47 jmp short _dsw_5 269 _dsw_0: 270 000000F8 31C0 xor eax, eax 271 000000FA 66AD lodsw ; ax = 400-y value ; *** 272 ; 273 000000FC 6639C8 cmp ax, cx ; [prevy] 274 000000FF 743E je short _dsw_5 275 00000101 7218 jb short _dsw_3 276 _dsw_1: 277 00000103 6641 inc cx ; previous 400-y 278 00000105 6639C8 cmp ax, cx 279 00000108 7635 jna short _dsw_5 280 ; ebx = x 281 ; eax = 400 - y 282 0000010A E81A000000 call _dsw_4 283 0000010F EBF2 jmp short _dsw_1 284 _dsw_2: 285 00000111 50 push eax 286 00000112 E85F000000 call getpixeloffset 287 00000117 AB stosd 288 00000118 58 pop eax 289 00000119 45 inc ebp ; increase pixel count 290 0000011A C3 retn 291 _dsw_3: 292 0000011B 6649 dec cx ; previous 400-y 293 0000011D 6639C8 cmp ax, cx 294 00000120 731D jnb short _dsw_5 295 ; ebx = x 296 ; eax = 400 - y 297 00000122 E802000000 call _dsw_4 298 00000127 EBF2 jmp short _dsw_3 299 _dsw_4: 300 00000129 53 push ebx 301 0000012A 8B1D[70070000] mov ebx, [prevx] 302 00000130 91 xchg eax, ecx ; [prevy] 303 00000131 E8DBFFFFFF call _dsw_2 304 00000136 91 xchg ecx, eax 305 00000137 5B pop ebx 306 00000138 FF05[70070000] inc dword [prevx] 307 0000013E C3 retn 308 _dsw_5: 309 0000013F 891D[70070000] mov [prevx], ebx ; previous x value 310 00000145 89C1 mov ecx, eax ; previous 400-y value 311 00000147 E8C5FFFFFF call _dsw_2 312 313 ;;;; end of curve continuity code 314 315 0000014C E825000000 call getpixeloffset 316 00000151 AB stosd 317 00000152 45 inc ebp ; increase pixel count 318 319 00000153 43 inc ebx 320 00000154 81FB80020000 cmp ebx, 640 321 0000015A 729C jb short _dsw_0 322 323 0000015C BE[74070000] mov esi, _fx 324 ;mov edx, ebp 325 ; 326 ; edx = pixel count 327 ; esi = user's single color pixel buffer address 328 sys _video, 0305h, [color], ebp 65 <1> 66 <1> 67 <1> 68 <1> 69 <1> %if %0 >= 2 70 00000161 BB05030000 <1> mov ebx, %2 71 <1> %if %0 >= 3 72 00000166 8B0D[6C070000] <1> mov ecx, %3 73 <1> %if %0 = 4 74 0000016C 89EA <1> mov edx, %4 75 <1> %endif 76 <1> %endif 77 <1> %endif 78 0000016E B81F000000 <1> mov eax, %1 79 <1> 80 00000173 CD40 <1> int 40h 329 330 00000175 C3 retn 331 332 getpixeloffset: 333 ; ebx = x position 334 ; eax = 400 - y position 335 00000176 BAB7010000 mov edx, 439 336 0000017B 29C2 sub edx, eax ; convert row position from 400-y 337 ; row = (400-y)+39 338 0000017D B8000A0000 mov eax, 640*4 ; screen width 339 00000182 F7E2 mul edx 340 00000184 53 push ebx 341 00000185 C1E302 shl ebx, 2 342 00000188 01D8 add eax, ebx ; add x to y*640 343 0000018A 5B pop ebx 344 ; eax = pixel offset on display page 345 0000018B C3 retn 346 beep: 347 ; call beep function (16/64 second, 886Hz) 348 sys _audio, 16, 1331 65 <1> 66 <1> 67 <1> 68 <1> 69 <1> %if %0 >= 2 70 0000018C BB10000000 <1> mov ebx, %2 71 <1> %if %0 >= 3 72 00000191 B933050000 <1> mov ecx, %3 73 <1> %if %0 = 4 74 <1> mov edx, %4 75 <1> %endif 76 <1> %endif 77 <1> %endif 78 00000196 B820000000 <1> mov eax, %1 79 <1> 80 0000019B CD40 <1> int 40h 349 0000019D C3 retn 350 351 set_text_mode: 352 0000019E 30E4 xor ah, ah 353 000001A0 B003 mov al, 3 354 ;int 10h ; al = 03h text mode, int 10 video 355 000001A2 CD31 int 31h ; TRDOS 386 - Video interrupt 356 000001A4 C3 retn 357 358 program_msg: 359 000001A5 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Draw Sine Wave" 359 000001AE 2076322E302E33202D- 359 000001B7 202827737973766964- 359 000001C0 656F27292054657374- 359 000001C9 2050726F6772616D20- 359 000001D2 2D2044726177205369- 359 000001DB 6E652057617665 360 000001E2 0D0A db 0Dh, 0Ah 361 000001E4 6279204572646F6761- db "by Erdogan Tan - 07/03/2021" 361 000001ED 6E2054616E202D2030- 361 000001F6 372F30332F32303231 362 ;db 0Dh, 0Ah, 0 363 000001FF 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 364 365 00000203 557365205350414345- db "Use SPACE,ENTER,'+','-' keys to change COLOR .." 365 0000020C 2C454E5445522C272B- 365 00000215 272C272D27206B6579- 365 0000021E 7320746F206368616E- 365 00000227 676520434F4C4F5220- 365 00000230 2E2E 366 00000232 0D0A db 0Dh, 0Ah 367 00000234 507265737320455343- db "Press ESC to exit .." 367 0000023D 20746F206578697420- 367 00000246 2E2E 368 00000248 0D0A db 0Dh, 0Ah 369 0000024A 0D0A db 0Dh, 0Ah 370 0000024C 507265737320616E79- db "Press any key to continue .." 370 00000255 206B657920746F2063- 370 0000025E 6F6E74696E7565202E- 370 00000267 2E 371 nextline: 372 00000268 0D0A00 db 0Dh, 0Ah, 0 373 374 sinustable: ; sine wave table (x=0 to 639, y= +200 to -200) 375 ; 19/02/2021 376 ; https://daycounter.com/Calculators/Sine-Generator-Calculator2.phtml 377 ; 640x400 (x= 0 to 639, y = 0 to 399) 378 0000026B C800C900CB00CD00CF- dw 200,201,203,205,207,209,211,213,215,217,219,221,223,225,227,229 378 00000274 00D100D300D500D700- 378 0000027D D900DB00DD00DF00E1- 378 00000286 00E300E500 379 0000028B E700E900EB00EC00EE- dw 231,233,235,236,238,240,242,244,246,248,250,252,254,256,257,259 379 00000294 00F000F200F400F600- 379 0000029D F800FA00FC00FE0000- 379 000002A6 0101010301 380 000002AB 0501070109010B010D- dw 261,263,265,267,269,270,272,274,276,278,279,281,283,285,287,288 380 000002B4 010E01100112011401- 380 000002BD 1601170119011B011D- 380 000002C6 011F012001 381 000002CB 220124012601270129- dw 290,292,294,295,297,299,300,302,304,305,307,309,310,312,314,315 381 000002D4 012B012C012E013001- 381 000002DD 310133013501360138- 381 000002E6 013A013B01 382 000002EB 3D013E014001410143- dw 317,318,320,321,323,325,326,328,329,331,332,333,335,336,338,339 382 000002F4 014501460148014901- 382 000002FD 4B014C014D014F0150- 382 00000306 0152015301 383 0000030B 55015601570159015A- dw 341,342,343,345,346,347,349,350,351,352,354,355,356,357,359,360 383 00000314 015B015D015E015F01- 383 0000031D 600162016301640165- 383 00000326 0167016801 384 0000032B 69016A016B016C016D- dw 361,362,363,364,365,366,368,369,370,371,372,373,374,375,375,376 384 00000334 016E01700171017201- 384 0000033D 730174017501760177- 384 00000346 0177017801 385 0000034B 79017A017B017C017D- dw 377,378,379,380,381,381,382,383,384,385,385,386,387,387,388,389 385 00000354 017D017E017F018001- 385 0000035D 810181018201830183- 385 00000366 0184018501 386 0000036B 850186018601870188- dw 389,390,390,391,392,392,393,393,393,394,394,395,395,396,396,396 386 00000374 018801890189018901- 386 0000037D 8A018A018B018B018C- 386 00000386 018C018C01 387 0000038B 8D018D018D018D018E- dw 397,397,397,397,398,398,398,398,398,399,399,399,399,399,399,399 387 00000394 018E018E018E018E01- 387 0000039D 8F018F018F018F018F- 387 000003A6 018F018F01 388 000003AB 8F018F018F018F018F- dw 399,399,399,399,399,399,399,399,398,398,398,398,398,397,397,397 388 000003B4 018F018F018F018E01- 388 000003BD 8E018E018E018E018D- 388 000003C6 018D018D01 389 000003CB 8D018C018C018C018B- dw 397,396,396,396,395,395,394,394,393,393,393,392,392,391,390,390 389 000003D4 018B018A018A018901- 389 000003DD 890189018801880187- 389 000003E6 0186018601 390 000003EB 850185018401830183- dw 389,389,388,387,387,386,385,385,384,383,382,381,381,380,379,378 390 000003F4 018201810181018001- 390 000003FD 7F017E017D017D017C- 390 00000406 017B017A01 391 0000040B 790178017701770176- dw 377,376,375,375,374,373,372,371,370,369,368,366,365,364,363,362 391 00000414 017501740173017201- 391 0000041D 710170016E016D016C- 391 00000426 016B016A01 392 0000042B 690168016701650164- dw 361,360,359,357,356,355,354,352,351,350,349,347,346,345,343,342 392 00000434 016301620160015F01- 392 0000043D 5E015D015B015A0159- 392 00000446 0157015601 393 0000044B 55015301520150014F- dw 341,339,338,336,335,333,332,331,329,328,326,325,323,321,320,318 393 00000454 014D014C014B014901- 393 0000045D 480146014501430141- 393 00000466 0140013E01 394 0000046B 3D013B013A01380136- dw 317,315,314,312,310,309,307,305,304,302,300,299,297,295,294,292 394 00000474 013501330131013001- 394 0000047D 2E012C012B01290127- 394 00000486 0126012401 395 0000048B 220120011F011D011B- dw 290,288,287,285,283,281,279,278,276,274,272,270,269,267,265,263 395 00000494 011901170116011401- 395 0000049D 120110010E010D010B- 395 000004A6 0109010701 396 000004AB 0501030101010001FE- dw 261,259,257,256,254,252,250,248,246,244,242,240,238,236,235,233 396 000004B4 00FC00FA00F800F600- 396 000004BD F400F200F000EE00EC- 396 000004C6 00EB00E900 397 000004CB E700E500E300E100DF- dw 231,229,227,225,223,221,219,217,215,213,211,209,207,205,203,201 397 000004D4 00DD00DB00D900D700- 397 000004DD D500D300D100CF00CD- 397 000004E6 00CB00C900 398 000004EB C800C600C400C200C0- dw 200,198,196,194,192,190,188,186,184,182,180,178,176,174,172,170 398 000004F4 00BE00BC00BA00B800- 398 000004FD B600B400B200B000AE- 398 00000506 00AC00AA00 399 0000050B A800A600A400A300A1- dw 168,166,164,163,161,159,157,155,153,151,149,147,145,143,142,140 399 00000514 009F009D009B009900- 399 0000051D 97009500930091008F- 399 00000526 008E008C00 400 0000052B 8A0088008600840082- dw 138,136,134,132,130,129,127,125,123,121,120,118,116,114,112,111 400 00000534 0081007F007D007B00- 400 0000053D 790078007600740072- 400 00000546 0070006F00 401 0000054B 6D006B006900680066- dw 109,107,105,104,102,100,99,97,95,94,92,90,89,87,85,84 401 00000554 006400630061005F00- 401 0000055D 5E005C005A00590057- 401 00000566 0055005400 402 0000056B 520051004F004E004C- dw 82,81,79,78,76,74,73,71,70,68,67,66,64,63,61,60 402 00000574 004A00490047004600- 402 0000057D 44004300420040003F- 402 00000586 003D003C00 403 0000058B 3A0039003800360035- dw 58,57,56,54,53,52,50,49,48,47,45,44,43,42,40,39 403 00000594 003400320031003000- 403 0000059D 2F002D002C002B002A- 403 000005A6 0028002700 404 000005AB 260025002400230022- dw 38,37,36,35,34,33,31,30,29,28,27,26,25,24,24,23 404 000005B4 0021001F001E001D00- 404 000005BD 1C001B001A00190018- 404 000005C6 0018001700 405 000005CB 160015001400130012- dw 22,21,20,19,18,18,17,16,15,14,14,13,12,12,11,10 405 000005D4 001200110010000F00- 405 000005DD 0E000E000D000C000C- 405 000005E6 000B000A00 406 000005EB 0A0009000900080007- dw 10,9,9,8,7,7,6,6,6,5,5,4,4,3,3,3 406 000005F4 000700060006000600- 406 000005FD 050005000400040003- 406 00000606 0003000300 407 0000060B 020002000200020001- dw 2,2,2,2,1,1,1,1,1,0,0,0,0,0,0,0 407 00000614 000100010001000100- 407 0000061D 000000000000000000- 407 00000626 0000000000 408 0000062B 000000000000000000- dw 0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2 408 00000634 000000000000000100- 408 0000063D 010001000100010002- 408 00000646 0002000200 409 0000064B 020003000300030004- dw 2,3,3,3,4,4,5,5,6,6,6,7,7,8,9,9 409 00000654 000400050005000600- 409 0000065D 060006000700070008- 409 00000666 0009000900 410 0000066B 0A000A000B000C000C- dw 10,10,11,12,12,13,14,14,15,16,17,18,18,19,20,21 410 00000674 000D000E000E000F00- 410 0000067D 100011001200120013- 410 00000686 0014001500 411 0000068B 160017001800180019- dw 22,23,24,24,25,26,27,28,29,30,31,33,34,35,36,37 411 00000694 001A001B001C001D00- 411 0000069D 1E001F002100220023- 411 000006A6 0024002500 412 000006AB 2600270028002A002B- dw 38,39,40,42,43,44,45,47,48,49,50,52,53,54,56,57 412 000006B4 002C002D002F003000- 412 000006BD 310032003400350036- 412 000006C6 0038003900 413 000006CB 3A003C003D003F0040- dw 58,60,61,63,64,66,67,68,70,71,73,74,76,78,79,81 413 000006D4 004200430044004600- 413 000006DD 470049004A004C004E- 413 000006E6 004F005100 414 000006EB 520054005500570059- dw 82,84,85,87,89,90,92,94,95,97,99,100,102,104,105,107 414 000006F4 005A005C005E005F00- 414 000006FD 610063006400660068- 414 00000706 0069006B00 415 0000070B 6D006F007000720074- dw 109,111,112,114,116,118,120,121,123,125,127,129,130,132,134,136 415 00000714 007600780079007B00- 415 0000071D 7D007F008100820084- 415 00000726 0086008800 416 0000072B 8A008C008E008F0091- dw 138,140,142,143,145,147,149,151,153,155,157,159,161,163,164,166 416 00000734 009300950097009900- 416 0000073D 9B009D009F00A100A3- 416 00000746 00A400A600 417 0000074B A800AA00AC00AE00B0- dw 168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198 417 00000754 00B200B400B600B800- 417 0000075D BA00BC00BE00C000C2- 417 00000766 00C400C600 418 419 bss: 420 421 ABSOLUTE bss 422 423 0000076B ?? alignb 4 424 425 0000076C ???????? color: resd 1 426 00000770 ???????? prevx: resd 1 427 ;prevy: resd 1 428 429 bss_start: 430 00000774 _fx: resd 640 ; for every X values from 0 to 639 431 00001174 resd 2048-640 ; used for repetitive x values for curve continuity 432 bss_end: