1 ; **************************************************************************** 2 ; sinus8.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 02/03/2021 6 ; 7 ; **************************************************************************** 8 ; nasm sinus8.s -l sinus8.txt -o SINUS8.PRG -Z error.txt 9 ; (modified from 'sinus6.s', 19/02/2021) 10 11 ; Draw sinus wave/curve by using 'sysvideo' bx=0305h 12 13 ; 14/07/2020 14 ; 31/12/2017 15 ; TRDOS 386 (v2.0) system calls 16 _ver equ 0 17 _exit equ 1 18 _fork equ 2 19 _read equ 3 20 _write equ 4 21 _open equ 5 22 _close equ 6 23 _wait equ 7 24 _create equ 8 25 _rename equ 9 26 _delete equ 10 27 _exec equ 11 28 _chdir equ 12 29 _time equ 13 30 _mkdir equ 14 31 _chmod equ 15 32 _rmdir equ 16 33 _break equ 17 34 _drive equ 18 35 _seek equ 19 36 _tell equ 20 37 _memory equ 21 38 _prompt equ 22 39 _path equ 23 40 _env equ 24 41 _stime equ 25 42 _quit equ 26 43 _intr equ 27 44 _dir equ 28 45 _emt equ 29 46 _ldrvt equ 30 47 _video equ 31 48 _audio equ 32 49 _timer equ 33 50 _sleep equ 34 51 _msg equ 35 52 _geterr equ 36 53 _fpstat equ 37 54 _pri equ 38 55 _rele equ 39 56 _fff equ 40 57 _fnf equ 41 58 _alloc equ 42 59 _dalloc equ 43 60 _calbac equ 44 61 _dma equ 45 62 63 %macro sys 1-4 64 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 65 ; 03/09/2015 66 ; 13/04/2015 67 ; Retro UNIX 386 v1 system call. 68 %if %0 >= 2 69 mov ebx, %2 70 %if %0 >= 3 71 mov ecx, %3 72 %if %0 = 4 73 mov edx, %4 74 %endif 75 %endif 76 %endif 77 mov eax, %1 78 ;int 30h 79 int 40h ; TRDOS 386 (TRDOS v2.0) 80 %endmacro 81 82 ; Retro UNIX 386 v1 system call format: 83 ; sys systemcall (eax) , , 84 85 [BITS 32] ; We need 32-bit intructions for protected mode 86 87 [ORG 0] 88 89 START_CODE: 90 ; clear bss 91 00000000 BF[5C0A0000] mov edi, bss_start 92 00000005 B900100000 mov ecx, (bss_end - bss_start)/4 93 ;xor eax, eax 94 0000000A F3AB rep stosd 95 96 ; program message 97 0000000C BE[8B010000] mov esi, program_msg 98 00000011 E8AD000000 call print_msg 99 100 00000016 30E4 xor ah, ah 101 ;int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY 102 ; Return: AH = scan code, AL = character 103 00000018 CD32 int 32h ; TRDOS 386 Keyboard interrupt 104 105 106 ; Set Video Mode to 118h ; 1024x768, 24 bit true colors 107 sys _video, 08FFh, 118h 107 <1> 107 <1> 107 <1> 107 <1> 107 <1> %if %0 >= 2 107 0000001A BBFF080000 <1> mov ebx, %2 107 <1> %if %0 >= 3 107 0000001F B918010000 <1> mov ecx, %3 107 <1> %if %0 = 4 107 <1> mov edx, %4 107 <1> %endif 107 <1> %endif 107 <1> %endif 107 00000024 B81F000000 <1> mov eax, %1 107 <1> 107 00000029 CD40 <1> int 40h 108 0000002B 09C0 or eax, eax 109 ;jz short terminate 110 ;mov [LFB_ADDR], edx ; pointer to LFB info table/structure 111 0000002D 750E jnz short set_vesa_mode_105h_ok 112 113 terminate: 114 0000002F E850010000 call set_text_mode 115 sys _exit 115 <1> 115 <1> 115 <1> 115 <1> 115 <1> %if %0 >= 2 115 <1> mov ebx, %2 115 <1> %if %0 >= 3 115 <1> mov ecx, %3 115 <1> %if %0 = 4 115 <1> mov edx, %4 115 <1> %endif 115 <1> %endif 115 <1> %endif 115 00000034 B801000000 <1> mov eax, %1 115 <1> 115 00000039 CD40 <1> int 40h 116 halt: 117 0000003B EBFE jmp short halt 118 119 set_vesa_mode_105h_ok: 120 0000003D C705[540A0000]0000- mov dword [color], 0FF0000h ; initial pixel color 120 00000045 FF00 121 _0: 122 00000047 E888000000 call drawsinewave 123 waitforkey: 124 ;mov ah, 1 125 ;int 32h 126 ;jz short getkey 127 ;inc word [counter] 128 ;nop 129 ;nop 130 ;nop 131 ;jmp short waitforkey 132 getkey: 133 0000004C 30E4 xor ah, ah 134 0000004E CD32 int 32h 135 136 00000050 663D032E cmp ax, 2E03h 137 00000054 74D9 je short terminate 138 00000056 3C1B cmp al, 1Bh ; ESC key 139 00000058 74D5 je short terminate 140 141 0000005A 3C2B cmp al, '+' 142 0000005C 7509 jne short _1 143 144 0000005E 8305[540A0000]20 add dword [color], 20h 145 00000065 EBE0 jmp short _0 146 _1: 147 00000067 3C2D cmp al, '-' 148 00000069 7509 jne short _2 149 150 0000006B 832D[540A0000]20 sub dword [color], 20h 151 00000072 EBD3 jmp short _0 152 _2: 153 00000074 3C20 cmp al, 20h ; space 154 00000076 750C jne short _3 155 00000078 8105[540A0000]2020- add dword [color], 2020h 155 00000080 0000 156 00000082 EBC3 jmp short _0 157 _3: 158 00000084 80FC4B cmp ah, 4Bh 159 00000087 7507 jne short _5 160 ; left arrow 161 _4: 162 00000089 E8E4000000 call beep 163 0000008E EBBC jmp waitforkey 164 _5: 165 00000090 80FC4D cmp ah, 4Dh 166 00000093 7502 jne short _6 167 168 ; right arrow 169 00000095 EBF2 jmp short _4 170 _6: 171 00000097 80FC50 cmp ah, 50h 172 0000009A 7502 jne short _7 173 ; down arrow 174 0000009C EBEB jmp short _4 175 _7: 176 0000009E 80FC48 cmp ah, 48h 177 000000A1 7502 jne short _8 178 ; up arrow 179 000000A3 EBE4 jmp short _4 180 _8: 181 000000A5 663D0D1C cmp ax, 1C0Dh 182 000000A9 7511 jne short _9 183 000000AB E8C2000000 call beep 184 000000B0 8105[540A0000]1010- add dword [color], 1010h 184 000000B8 0000 185 000000BA EB8B jmp short _0 186 _9: 187 000000BC E8B1000000 call beep 188 000000C1 EB89 jmp waitforkey 189 190 print_msg: 191 000000C3 B40E mov ah, 0Eh 192 000000C5 BB07000000 mov ebx, 7 193 ;mov bl, 7 ; char attribute & color 194 p_next_chr: 195 000000CA AC lodsb 196 000000CB 08C0 or al, al 197 000000CD 7404 jz short p_retn ; retn 198 000000CF CD31 int 31h 199 000000D1 EBF7 jmp short p_next_chr 200 p_retn: 201 000000D3 C3 retn 202 203 drawsinewave: 204 ; INPUT: 205 ; sinustable 206 ; 207 ; Modified registers: esi, edi, eax, ecx, ebx, edx 208 209 ; fill _fx table by using sine wave table 210 ; x = 0 to 1023 211 ; y = +256 to -256 212 ; +256 --> 511 -> screen row position = (512-511)+127 = 128 213 ; -256 --> 0 -> screen row position = (512-0)+127 = 639 214 215 000000D4 BE[51020000] mov esi, sinustable 216 000000D9 BF[5C0A0000] mov edi, _fx 217 000000DE 31C0 xor eax, eax 218 000000E0 29DB sub ebx, ebx ; 0 ; x 219 000000E2 31ED xor ebp, ebp ; pixel count 220 000000E4 66AD lodsw 221 000000E6 EB45 jmp short _dsw_5 222 _dsw_0: 223 000000E8 66AD lodsw ; ax = 512-y value 224 ; 225 000000EA 6639C8 cmp ax, cx ; [prevy] 226 000000ED 743E je short _dsw_5 227 000000EF 7218 jb short _dsw_3 228 _dsw_1: 229 000000F1 6641 inc cx ; previous 512-y 230 000000F3 6639C8 cmp ax, cx 231 000000F6 7635 jna short _dsw_5 232 ; ebx = x 233 ; eax = 512 - y 234 000000F8 E81A000000 call _dsw_4 235 000000FD EBF2 jmp short _dsw_1 236 _dsw_2: 237 000000FF 50 push eax 238 00000100 E858000000 call getpixeloffset 239 00000105 AB stosd 240 00000106 58 pop eax 241 00000107 45 inc ebp ; increase pixel count 242 00000108 C3 retn 243 _dsw_3: 244 00000109 6649 dec cx ; previous 512-y 245 0000010B 6639C8 cmp ax, cx 246 0000010E 731D jnb short _dsw_5 247 ; ebx = x 248 ; eax = 512 - y 249 00000110 E802000000 call _dsw_4 250 00000115 EBF2 jmp short _dsw_3 251 _dsw_4: 252 00000117 53 push ebx 253 00000118 8B1D[580A0000] mov ebx, [prevx] 254 0000011E 91 xchg eax, ecx ; [prevy] 255 0000011F E8DBFFFFFF call _dsw_2 256 00000124 91 xchg ecx, eax 257 00000125 5B pop ebx 258 00000126 FF05[580A0000] inc dword [prevx] 259 0000012C C3 retn 260 _dsw_5: 261 0000012D 891D[580A0000] mov [prevx], ebx ; previous x value 262 00000133 89C1 mov ecx, eax ; previous 512-y value 263 00000135 E8C5FFFFFF call _dsw_2 264 0000013A 43 inc ebx 265 0000013B 81FB00040000 cmp ebx, 1024 266 00000141 72A5 jb short _dsw_0 267 268 00000143 BE[5C0A0000] mov esi, _fx 269 ;mov edx, ebp 270 ; 271 ; edx = pixel count 272 ; esi = user's single color pixel buffer address 273 sys _video, 0305h, [color], ebp 273 <1> 273 <1> 273 <1> 273 <1> 273 <1> %if %0 >= 2 273 00000148 BB05030000 <1> mov ebx, %2 273 <1> %if %0 >= 3 273 0000014D 8B0D[540A0000] <1> mov ecx, %3 273 <1> %if %0 = 4 273 00000153 89EA <1> mov edx, %4 273 <1> %endif 273 <1> %endif 273 <1> %endif 273 00000155 B81F000000 <1> mov eax, %1 273 <1> 273 0000015A CD40 <1> int 40h 274 275 0000015C C3 retn 276 277 getpixeloffset: 278 ; 24 bit true color pixel offset 279 ; ebx = x position 280 ; eax = 512 - y position 281 0000015D BA7F020000 mov edx, 512+127 ; 639 282 00000162 29C2 sub edx, eax ; convert row position from 512-y 283 ; row = (512-y)+127 284 00000164 B8000C0000 mov eax, 1024*3 ; screen width 285 00000169 F7E2 mul edx 286 0000016B 01D8 add eax, ebx 287 0000016D 01D8 add eax, ebx 288 0000016F 01D8 add eax, ebx ; add x to y*1024 289 ; eax = pixel offset on display page 290 00000171 C3 retn 291 beep: 292 ; call beep function (16/64 second, 886Hz) 293 sys _audio, 16, 1331 293 <1> 293 <1> 293 <1> 293 <1> 293 <1> %if %0 >= 2 293 00000172 BB10000000 <1> mov ebx, %2 293 <1> %if %0 >= 3 293 00000177 B933050000 <1> mov ecx, %3 293 <1> %if %0 = 4 293 <1> mov edx, %4 293 <1> %endif 293 <1> %endif 293 <1> %endif 293 0000017C B820000000 <1> mov eax, %1 293 <1> 293 00000181 CD40 <1> int 40h 294 00000183 C3 retn 295 296 set_text_mode: 297 00000184 30E4 xor ah, ah 298 00000186 B003 mov al, 3 299 ;int 10h ; al = 03h text mode, int 10 video 300 00000188 CD31 int 31h ; TRDOS 386 - Video interrupt 301 0000018A C3 retn 302 303 program_msg: 304 0000018B 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Draw Sine Wave" 304 00000194 2076322E302E33202D- 304 0000019D 202827737973766964- 304 000001A6 656F27292054657374- 304 000001AF 2050726F6772616D20- 304 000001B8 2D2044726177205369- 304 000001C1 6E652057617665 305 000001C8 0D0A db 0Dh, 0Ah 306 000001CA 6279204572646F6761- db "by Erdogan Tan - 02/03/2021" 306 000001D3 6E2054616E202D2030- 306 000001DC 322F30332F32303231 307 ;db 0Dh, 0Ah, 0 308 000001E5 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 309 310 000001E9 557365205350414345- db "Use SPACE,ENTER,'+','-' keys to change COLOR .." 310 000001F2 2C454E5445522C272B- 310 000001FB 272C272D27206B6579- 310 00000204 7320746F206368616E- 310 0000020D 676520434F4C4F5220- 310 00000216 2E2E 311 00000218 0D0A db 0Dh, 0Ah 312 0000021A 507265737320455343- db "Press ESC to exit .." 312 00000223 20746F206578697420- 312 0000022C 2E2E 313 0000022E 0D0A db 0Dh, 0Ah 314 00000230 0D0A db 0Dh, 0Ah 315 00000232 507265737320616E79- db "Press any key to continue .." 315 0000023B 206B657920746F2063- 315 00000244 6F6E74696E7565202E- 315 0000024D 2E 316 nextline: 317 0000024E 0D0A00 db 0Dh, 0Ah, 0 318 319 sinustable: ; sine wave table (x=0 to 1023, y= +256 to -256) 320 ; 19/02/2021 321 ; https://daycounter.com/Calculators/Sine-Generator-Calculator2.phtml 322 ; 1024x512 (x= 0 to 1023, y = 0 to 511) 323 00000251 000101010301040106- dw 256,257,259,260,262,263,265,266,268,270,271,273,274,276,277,279,281,282,284,285,287,288,290,291,293,295,296,298,299,301,302,304 323 0000025A 01070109010A010C01- 323 00000263 0E010F011101120114- 323 0000026C 011501170119011A01- 323 00000275 1C011D011F01200122- 323 0000027E 012301250127012801- 323 00000287 2A012B012D012E0130- 323 00000290 01 324 00000291 310133013401360137- dw 305,307,308,310,311,313,315,316,318,319,321,322,324,325,327,328,330,331,333,334,336,337,339,340,342,343,345,346,347,349,350,352 324 0000029A 0139013B013C013E01- 324 000002A3 3F0141014201440145- 324 000002AC 01470148014A014B01- 324 000002B5 4D014E015001510153- 324 000002BE 015401560157015901- 324 000002C7 5A015B015D015E0160- 324 000002D0 01 325 000002D1 610163016401660167- dw 353,355,356,358,359,360,362,363,365,366,368,369,370,372,373,375,376,377,379,380,381,383,384,386,387,388,390,391,392,394,395,396 325 000002DA 0168016A016B016D01- 325 000002E3 6E0170017101720174- 325 000002EC 017501770178017901- 325 000002F5 7B017C017D017F0180- 325 000002FE 018201830184018601- 325 00000307 870188018A018B018C- 325 00000310 01 326 00000311 8D018F019001910193- dw 397,399,400,401,403,404,405,406,408,409,410,411,413,414,415,416,418,419,420,421,422,424,425,426,427,428,429,431,432,433,434,435 326 0000031A 019401950196019801- 326 00000323 99019A019B019D019E- 326 0000032C 019F01A001A201A301- 326 00000335 A401A501A601A801A9- 326 0000033E 01AA01AB01AC01AD01- 326 00000347 AF01B001B101B201B3- 326 00000350 01 327 00000351 B401B501B601B701B9- dw 436,437,438,439,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,463,464,465,466,467 327 0000035A 01BA01BB01BC01BD01- 327 00000363 BE01BF01C001C101C2- 327 0000036C 01C301C401C501C601- 327 00000375 C701C801C901CA01CB- 327 0000037E 01CC01CD01CE01CF01- 327 00000387 CF01D001D101D201D3- 327 00000390 01 328 00000391 D401D501D601D701D7- dw 468,469,470,471,471,472,473,474,475,475,476,477,478,479,479,480,481,482,482,483,484,484,485,486,486,487,488,488,489,490,490,491 328 0000039A 01D801D901DA01DB01- 328 000003A3 DB01DC01DD01DE01DF- 328 000003AC 01DF01E001E101E201- 328 000003B5 E201E301E401E401E5- 328 000003BE 01E601E601E701E801- 328 000003C7 E801E901EA01EA01EB- 328 000003D0 01 329 000003D1 EC01EC01ED01ED01EE- dw 492,492,493,493,494,494,495,496,496,497,497,498,498,499,499,500,500,500,501,501,502,502,503,503,503,504,504,504,505,505,505,506 329 000003DA 01EE01EF01F001F001- 329 000003E3 F101F101F201F201F3- 329 000003EC 01F301F401F401F401- 329 000003F5 F501F501F601F601F7- 329 000003FE 01F701F701F801F801- 329 00000407 F801F901F901F901FA- 329 00000410 01 330 00000411 FA01FA01FB01FB01FB- dw 506,506,507,507,507,508,508,508,508,508,509,509,509,509,509,510,510,510,510,510,510,510,511,511,511,511,511,511,511,511,511,511 330 0000041A 01FC01FC01FC01FC01- 330 00000423 FC01FD01FD01FD01FD- 330 0000042C 01FD01FE01FE01FE01- 330 00000435 FE01FE01FE01FE01FF- 330 0000043E 01FF01FF01FF01FF01- 330 00000447 FF01FF01FF01FF01FF- 330 00000450 01 331 00000451 FF01FF01FF01FF01FF- dw 511,511,511,511,511,511,511,511,511,511,511,510,510,510,510,510,510,510,509,509,509,509,509,508,508,508,508,508,507,507,507,506 331 0000045A 01FF01FF01FF01FF01- 331 00000463 FF01FF01FE01FE01FE- 331 0000046C 01FE01FE01FE01FE01- 331 00000475 FD01FD01FD01FD01FD- 331 0000047E 01FC01FC01FC01FC01- 331 00000487 FC01FB01FB01FB01FA- 331 00000490 01 332 00000491 FA01FA01F901F901F9- dw 506,506,505,505,505,504,504,504,503,503,503,502,502,501,501,500,500,500,499,499,498,498,497,497,496,496,495,494,494,493,493,492 332 0000049A 01F801F801F801F701- 332 000004A3 F701F701F601F601F5- 332 000004AC 01F501F401F401F401- 332 000004B5 F301F301F201F201F1- 332 000004BE 01F101F001F001EF01- 332 000004C7 EE01EE01ED01ED01EC- 332 000004D0 01 333 000004D1 EC01EB01EA01EA01E9- dw 492,491,490,490,489,488,488,487,486,486,485,484,484,483,482,482,481,480,479,479,478,477,476,475,475,474,473,472,471,471,470,469 333 000004DA 01E801E801E701E601- 333 000004E3 E601E501E401E401E3- 333 000004EC 01E201E201E101E001- 333 000004F5 DF01DF01DE01DD01DC- 333 000004FE 01DB01DB01DA01D901- 333 00000507 D801D701D701D601D5- 333 00000510 01 334 00000511 D401D301D201D101D0- dw 468,467,466,465,464,463,463,462,461,460,459,458,457,456,455,454,453,452,451,450,449,448,447,446,445,444,443,442,441,439,438,437 334 0000051A 01CF01CF01CE01CD01- 334 00000523 CC01CB01CA01C901C8- 334 0000052C 01C701C601C501C401- 334 00000535 C301C201C101C001BF- 334 0000053E 01BE01BD01BC01BB01- 334 00000547 BA01B901B701B601B5- 334 00000550 01 335 00000551 B401B301B201B101B0- dw 436,435,434,433,432,431,429,428,427,426,425,424,422,421,420,419,418,416,415,414,413,411,410,409,408,406,405,404,403,401,400,399 335 0000055A 01AF01AD01AC01AB01- 335 00000563 AA01A901A801A601A5- 335 0000056C 01A401A301A201A001- 335 00000575 9F019E019D019B019A- 335 0000057E 019901980196019501- 335 00000587 94019301910190018F- 335 00000590 01 336 00000591 8D018C018B018A0188- dw 397,396,395,394,392,391,390,388,387,386,384,383,381,380,379,377,376,375,373,372,370,369,368,366,365,363,362,360,359,358,356,355 336 0000059A 018701860184018301- 336 000005A3 820180017F017D017C- 336 000005AC 017B01790178017701- 336 000005B5 750174017201710170- 336 000005BE 016E016D016B016A01- 336 000005C7 680167016601640163- 336 000005D0 01 337 000005D1 610160015E015D015B- dw 353,352,350,349,347,346,345,343,342,340,339,337,336,334,333,331,330,328,327,325,324,322,321,319,318,316,315,313,311,310,308,307 337 000005DA 015A01590157015601- 337 000005E3 54015301510150014E- 337 000005EC 014D014B014A014801- 337 000005F5 470145014401420141- 337 000005FE 013F013E013C013B01- 337 00000607 390137013601340133- 337 00000610 01 338 00000611 310130012E012D012B- dw 305,304,302,301,299,298,296,295,293,291,290,288,287,285,284,282,281,279,277,276,274,273,271,270,268,266,265,263,262,260,259,257 338 0000061A 012A01280127012501- 338 00000623 2301220120011F011D- 338 0000062C 011C011A0119011701- 338 00000635 15011401120111010F- 338 0000063E 010E010C010A010901- 338 00000647 070106010401030101- 338 00000650 01 339 00000651 0001FE00FC00FB00F9- dw 256,254,252,251,249,248,246,245,243,241,240,238,237,235,234,232,230,229,227,226,224,223,221,220,218,216,215,213,212,210,209,207 339 0000065A 00F800F600F500F300- 339 00000663 F100F000EE00ED00EB- 339 0000066C 00EA00E800E600E500- 339 00000675 E300E200E000DF00DD- 339 0000067E 00DC00DA00D800D700- 339 00000687 D500D400D200D100CF- 339 00000690 00 340 00000691 CE00CC00CB00C900C8- dw 206,204,203,201,200,198,196,195,193,192,190,189,187,186,184,183,181,180,178,177,175,174,172,171,169,168,166,165,164,162,161,159 340 0000069A 00C600C400C300C100- 340 000006A3 C000BE00BD00BB00BA- 340 000006AC 00B800B700B500B400- 340 000006B5 B200B100AF00AE00AC- 340 000006BE 00AB00A900A800A600- 340 000006C7 A500A400A200A1009F- 340 000006D0 00 341 000006D1 9E009C009B00990098- dw 158,156,155,153,152,151,149,148,146,145,143,142,141,139,138,136,135,134,132,131,130,128,127,125,124,123,121,120,119,117,116,115 341 000006DA 009700950094009200- 341 000006E3 91008F008E008D008B- 341 000006EC 008A00880087008600- 341 000006F5 84008300820080007F- 341 000006FE 007D007C007B007900- 341 00000707 780077007500740073- 341 00000710 00 342 00000711 720070006F006E006C- dw 114,112,111,110,108,107,106,105,103,102,101,100,98,97,96,95,93,92,91,90,89,87,86,85,84,83,82,80,79,78,77,76 342 0000071A 006B006A0069006700- 342 00000723 660065006400620061- 342 0000072C 0060005F005D005C00- 342 00000735 5B005A005900570056- 342 0000073E 005500540053005200- 342 00000747 50004F004E004D004C- 342 00000750 00 343 00000751 4B004A004900480046- dw 75,74,73,72,70,69,68,67,66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,48,47,46,45,44 343 0000075A 004500440043004200- 343 00000763 410040003F003E003D- 343 0000076C 003C003B003A003900- 343 00000775 380037003600350034- 343 0000077E 003300320031003000- 343 00000787 30002F002E002D002C- 343 00000790 00 344 00000791 2B002A002900280028- dw 43,42,41,40,40,39,38,37,36,36,35,34,33,32,32,31,30,29,29,28,27,27,26,25,25,24,23,23,22,21,21,20 344 0000079A 002700260025002400- 344 000007A3 240023002200210020- 344 000007AC 0020001F001E001D00- 344 000007B5 1D001C001B001B001A- 344 000007BE 001900190018001700- 344 000007C7 170016001500150014- 344 000007D0 00 345 000007D1 130013001200120011- dw 19,19,18,18,17,17,16,15,15,14,14,13,13,12,12,11,11,11,10,10,9,9,8,8,8,7,7,7,6,6,6,5 345 000007DA 00110010000F000F00- 345 000007E3 0E000E000D000D000C- 345 000007EC 000C000B000B000B00- 345 000007F5 0A000A000900090008- 345 000007FE 000800080007000700- 345 00000807 070006000600060005- 345 00000810 00 346 00000811 050005000400040004- dw 5,5,4,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 346 0000081A 000300030003000300- 346 00000823 030002000200020002- 346 0000082C 000200010001000100- 346 00000835 010001000100010000- 346 0000083E 000000000000000000- 346 00000847 000000000000000000- 346 00000850 00 347 00000851 000000000000000000- dw 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,5 347 0000085A 000000000000000000- 347 00000863 000000000100010001- 347 0000086C 000100010001000100- 347 00000875 020002000200020002- 347 0000087E 000300030003000300- 347 00000887 030004000400040005- 347 00000890 00 348 00000891 050005000600060006- dw 5,5,6,6,6,7,7,7,8,8,8,9,9,10,10,11,11,11,12,12,13,13,14,14,15,15,16,17,17,18,18,19 348 0000089A 000700070007000800- 348 000008A3 08000800090009000A- 348 000008AC 000A000B000B000B00- 348 000008B5 0C000C000D000D000E- 348 000008BE 000E000F000F001000- 348 000008C7 110011001200120013- 348 000008D0 00 349 000008D1 130014001500150016- dw 19,20,21,21,22,23,23,24,25,25,26,27,27,28,29,29,30,31,32,32,33,34,35,36,36,37,38,39,40,40,41,42 349 000008DA 001700170018001900- 349 000008E3 19001A001B001B001C- 349 000008EC 001D001D001E001F00- 349 000008F5 200020002100220023- 349 000008FE 002400240025002600- 349 00000907 27002800280029002A- 349 00000910 00 350 00000911 2B002C002D002E002F- dw 43,44,45,46,47,48,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,72,73,74 350 0000091A 003000300031003200- 350 00000923 330034003500360037- 350 0000092C 00380039003A003B00- 350 00000935 3C003D003E003F0040- 350 0000093E 004100420043004400- 350 00000947 45004600480049004A- 350 00000950 00 351 00000951 4B004C004D004E004F- dw 75,76,77,78,79,80,82,83,84,85,86,87,89,90,91,92,93,95,96,97,98,100,101,102,103,105,106,107,108,110,111,112 351 0000095A 005000520053005400- 351 00000963 55005600570059005A- 351 0000096C 005B005C005D005F00- 351 00000975 600061006200640065- 351 0000097E 006600670069006A00- 351 00000987 6B006C006E006F0070- 351 00000990 00 352 00000991 720073007400750077- dw 114,115,116,117,119,120,121,123,124,125,127,128,130,131,132,134,135,136,138,139,141,142,143,145,146,148,149,151,152,153,155,156 352 0000099A 00780079007B007C00- 352 000009A3 7D007F008000820083- 352 000009AC 008400860087008800- 352 000009B5 8A008B008D008E008F- 352 000009BE 009100920094009500- 352 000009C7 9700980099009B009C- 352 000009D0 00 353 000009D1 9E009F00A100A200A4- dw 158,159,161,162,164,165,166,168,169,171,172,174,175,177,178,180,181,183,184,186,187,189,190,192,193,195,196,198,200,201,203,204 353 000009DA 00A500A600A800A900- 353 000009E3 AB00AC00AE00AF00B1- 353 000009EC 00B200B400B500B700- 353 000009F5 B800BA00BB00BD00BE- 353 000009FE 00C000C100C300C400- 353 00000A07 C600C800C900CB00CC- 353 00000A10 00 354 00000A11 CE00CF00D100D200D4- dw 206,207,209,210,212,213,215,216,218,220,221,223,224,226,227,229,230,232,234,235,237,238,240,241,243,245,246,248,249,251,252,254 354 00000A1A 00D500D700D800DA00- 354 00000A23 DC00DD00DF00E000E2- 354 00000A2C 00E300E500E600E800- 354 00000A35 EA00EB00ED00EE00F0- 354 00000A3E 00F100F300F500F600- 354 00000A47 F800F900FB00FC00FE- 354 00000A50 00 355 356 bss: 357 358 ABSOLUTE bss 359 360 00000A51 alignb 4 361 362 00000A54 color: resd 1 363 00000A58 prevx: resd 1 364 ;prevy: resd 1 365 366 bss_start: 367 00000A5C _fx: resd 1024 ; for every X values from 0 to 1023 368 00001A5C resd 4096-1024 ; used for repetitive x values for continuity 369 bss_end: