1 ; **************************************************************************** 2 ; sinus6.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 19/02/2021 6 ; 7 ; **************************************************************************** 8 ; nasm sinus6.s -l sinus6.txt -o SINUS6.PRG -Z error.txt 9 ; (modified from 'sinus3.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[4C0A0000] 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[7C010000] mov esi, program_msg 98 00000011 E8A2000000 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 105h ; 1024x768, 256 colors 107 sys _video, 08FFh, 105h 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 B905010000 <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 E841010000 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 C605[440A0000]1C mov byte [color], 28 ; initial pixel color 121 _0: 122 00000044 E880000000 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 00000049 30E4 xor ah, ah 134 0000004B CD32 int 32h 135 136 0000004D 663D032E cmp ax, 2E03h 137 00000051 74DC je short terminate 138 00000053 3C1B cmp al, 1Bh ; ESC key 139 00000055 74D8 je short terminate 140 141 00000057 3C2B cmp al, '+' 142 00000059 7508 jne short _1 143 144 0000005B FE05[440A0000] inc byte [color] 145 00000061 EBE1 jmp short _0 146 _1: 147 00000063 3C2D cmp al, '-' 148 00000065 7508 jne short _2 149 150 00000067 FE0D[440A0000] dec byte [color] 151 0000006D EBD5 jmp short _0 152 _2: 153 0000006F 3C20 cmp al, 20h ; space 154 00000071 7509 jne short _3 155 00000073 8005[440A0000]08 add byte [color], 8 156 0000007A EBC8 jmp short _0 157 _3: 158 0000007C 80FC4B cmp ah, 4Bh 159 0000007F 7507 jne short _5 160 ; left arrow 161 _4: 162 00000081 E8DD000000 call beep 163 00000086 EBC1 jmp waitforkey 164 _5: 165 00000088 80FC4D cmp ah, 4Dh 166 0000008B 7502 jne short _6 167 168 ; right arrow 169 0000008D EBF2 jmp short _4 170 _6: 171 0000008F 80FC50 cmp ah, 50h 172 00000092 7502 jne short _7 173 ; down arrow 174 00000094 EBEB jmp short _4 175 _7: 176 00000096 80FC48 cmp ah, 48h 177 00000099 7502 jne short _8 178 ; up arrow 179 0000009B EBE4 jmp short _4 180 _8: 181 0000009D 663D0D1C cmp ax, 1C0Dh 182 000000A1 750E jne short _9 183 000000A3 E8BB000000 call beep 184 000000A8 8005[440A0000]04 add byte [color], 4 185 000000AF EB93 jmp short _0 186 _9: 187 000000B1 E8AD000000 call beep 188 000000B6 EB91 jmp waitforkey 189 190 print_msg: 191 000000B8 B40E mov ah, 0Eh 192 000000BA BB07000000 mov ebx, 7 193 ;mov bl, 7 ; char attribute & color 194 p_next_chr: 195 000000BF AC lodsb 196 000000C0 08C0 or al, al 197 000000C2 7404 jz short p_retn ; retn 198 000000C4 CD31 int 31h 199 000000C6 EBF7 jmp short p_next_chr 200 p_retn: 201 000000C8 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 000000C9 BE[42020000] mov esi, sinustable 216 000000CE BF[4C0A0000] mov edi, _fx 217 000000D3 31C0 xor eax, eax 218 000000D5 29DB sub ebx, ebx ; 0 ; x 219 000000D7 31ED xor ebp, ebp ; pixel count 220 000000D9 66AD lodsw 221 000000DB EB45 jmp short _dsw_5 222 _dsw_0: 223 000000DD 66AD lodsw ; ax = 512-y value 224 ; 225 000000DF 6639C8 cmp ax, cx ; [prevy] 226 000000E2 743E je short _dsw_5 227 000000E4 7218 jb short _dsw_3 228 _dsw_1: 229 000000E6 6641 inc cx ; previous 512-y 230 000000E8 6639C8 cmp ax, cx 231 000000EB 7635 jna short _dsw_5 232 ; ebx = x 233 ; eax = 512 - y 234 000000ED E81A000000 call _dsw_4 235 000000F2 EBF2 jmp short _dsw_1 236 _dsw_2: 237 000000F4 50 push eax 238 000000F5 E858000000 call getpixeloffset 239 000000FA AB stosd 240 000000FB 58 pop eax 241 000000FC 45 inc ebp ; increase pixel count 242 000000FD C3 retn 243 _dsw_3: 244 000000FE 6649 dec cx ; previous 512-y 245 00000100 6639C8 cmp ax, cx 246 00000103 731D jnb short _dsw_5 247 ; ebx = x 248 ; eax = 512 - y 249 00000105 E802000000 call _dsw_4 250 0000010A EBF2 jmp short _dsw_3 251 _dsw_4: 252 0000010C 53 push ebx 253 0000010D 8B1D[480A0000] mov ebx, [prevx] 254 00000113 91 xchg eax, ecx ; [prevy] 255 00000114 E8DBFFFFFF call _dsw_2 256 00000119 91 xchg ecx, eax 257 0000011A 5B pop ebx 258 0000011B FF05[480A0000] inc dword [prevx] 259 00000121 C3 retn 260 _dsw_5: 261 00000122 891D[480A0000] mov [prevx], ebx ; previous x value 262 00000128 89C1 mov ecx, eax ; previous 512-y value 263 0000012A E8C5FFFFFF call _dsw_2 264 0000012F 43 inc ebx 265 00000130 81FB00040000 cmp ebx, 1024 266 00000136 72A5 jb short _dsw_0 267 268 00000138 BE[4C0A0000] 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 0000013D BB05030000 <1> mov ebx, %2 273 <1> %if %0 >= 3 273 00000142 8B0D[440A0000] <1> mov ecx, %3 273 <1> %if %0 = 4 273 00000148 89EA <1> mov edx, %4 273 <1> %endif 273 <1> %endif 273 <1> %endif 273 0000014A B81F000000 <1> mov eax, %1 273 <1> 273 0000014F CD40 <1> int 40h 274 275 00000151 C3 retn 276 277 getpixeloffset: 278 ; ebx = x position 279 ; eax = 512 - y position 280 00000152 BA7F020000 mov edx, 512+127 ; 639 281 00000157 29C2 sub edx, eax ; convert row position from 512-y 282 ; row = (512-y)+127 283 00000159 B800040000 mov eax, 1024 ; screen width 284 0000015E F7E2 mul edx 285 00000160 01D8 add eax, ebx ; add x to y*1024 286 ; eax = pixel offset on display page 287 00000162 C3 retn 288 beep: 289 ; call beep function (16/64 second, 886Hz) 290 sys _audio, 16, 1331 290 <1> 290 <1> 290 <1> 290 <1> 290 <1> %if %0 >= 2 290 00000163 BB10000000 <1> mov ebx, %2 290 <1> %if %0 >= 3 290 00000168 B933050000 <1> mov ecx, %3 290 <1> %if %0 = 4 290 <1> mov edx, %4 290 <1> %endif 290 <1> %endif 290 <1> %endif 290 0000016D B820000000 <1> mov eax, %1 290 <1> 290 00000172 CD40 <1> int 40h 291 00000174 C3 retn 292 293 set_text_mode: 294 00000175 30E4 xor ah, ah 295 00000177 B003 mov al, 3 296 ;int 10h ; al = 03h text mode, int 10 video 297 00000179 CD31 int 31h ; TRDOS 386 - Video interrupt 298 0000017B C3 retn 299 300 program_msg: 301 0000017C 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Draw Sine Wave" 301 00000185 2076322E302E33202D- 301 0000018E 202827737973766964- 301 00000197 656F27292054657374- 301 000001A0 2050726F6772616D20- 301 000001A9 2D2044726177205369- 301 000001B2 6E652057617665 302 000001B9 0D0A db 0Dh, 0Ah 303 000001BB 6279204572646F6761- db "by Erdogan Tan - 19/02/2021" 303 000001C4 6E2054616E202D2031- 303 000001CD 392F30322F32303231 304 ;db 0Dh, 0Ah, 0 305 000001D6 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 306 307 000001DA 557365205350414345- db "Use SPACE,ENTER,'+','-' keys to change COLOR .." 307 000001E3 2C454E5445522C272B- 307 000001EC 272C272D27206B6579- 307 000001F5 7320746F206368616E- 307 000001FE 676520434F4C4F5220- 307 00000207 2E2E 308 00000209 0D0A db 0Dh, 0Ah 309 0000020B 507265737320455343- db "Press ESC to exit .." 309 00000214 20746F206578697420- 309 0000021D 2E2E 310 0000021F 0D0A db 0Dh, 0Ah 311 00000221 0D0A db 0Dh, 0Ah 312 00000223 507265737320616E79- db "Press any key to continue .." 312 0000022C 206B657920746F2063- 312 00000235 6F6E74696E7565202E- 312 0000023E 2E 313 nextline: 314 0000023F 0D0A00 db 0Dh, 0Ah, 0 315 316 sinustable: ; sine wave table (x=0 to 1023, y= +256 to -256) 317 ; 19/02/2021 318 ; https://daycounter.com/Calculators/Sine-Generator-Calculator2.phtml 319 ; 1024x512 (x= 0 to 1023, y = 0 to 511) 320 00000242 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 320 0000024B 01070109010A010C01- 320 00000254 0E010F011101120114- 320 0000025D 011501170119011A01- 320 00000266 1C011D011F01200122- 320 0000026F 012301250127012801- 320 00000278 2A012B012D012E0130- 320 00000281 01 321 00000282 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 321 0000028B 0139013B013C013E01- 321 00000294 3F0141014201440145- 321 0000029D 01470148014A014B01- 321 000002A6 4D014E015001510153- 321 000002AF 015401560157015901- 321 000002B8 5A015B015D015E0160- 321 000002C1 01 322 000002C2 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 322 000002CB 0168016A016B016D01- 322 000002D4 6E0170017101720174- 322 000002DD 017501770178017901- 322 000002E6 7B017C017D017F0180- 322 000002EF 018201830184018601- 322 000002F8 870188018A018B018C- 322 00000301 01 323 00000302 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 323 0000030B 019401950196019801- 323 00000314 99019A019B019D019E- 323 0000031D 019F01A001A201A301- 323 00000326 A401A501A601A801A9- 323 0000032F 01AA01AB01AC01AD01- 323 00000338 AF01B001B101B201B3- 323 00000341 01 324 00000342 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 324 0000034B 01BA01BB01BC01BD01- 324 00000354 BE01BF01C001C101C2- 324 0000035D 01C301C401C501C601- 324 00000366 C701C801C901CA01CB- 324 0000036F 01CC01CD01CE01CF01- 324 00000378 CF01D001D101D201D3- 324 00000381 01 325 00000382 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 325 0000038B 01D801D901DA01DB01- 325 00000394 DB01DC01DD01DE01DF- 325 0000039D 01DF01E001E101E201- 325 000003A6 E201E301E401E401E5- 325 000003AF 01E601E601E701E801- 325 000003B8 E801E901EA01EA01EB- 325 000003C1 01 326 000003C2 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 326 000003CB 01EE01EF01F001F001- 326 000003D4 F101F101F201F201F3- 326 000003DD 01F301F401F401F401- 326 000003E6 F501F501F601F601F7- 326 000003EF 01F701F701F801F801- 326 000003F8 F801F901F901F901FA- 326 00000401 01 327 00000402 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 327 0000040B 01FC01FC01FC01FC01- 327 00000414 FC01FD01FD01FD01FD- 327 0000041D 01FD01FE01FE01FE01- 327 00000426 FE01FE01FE01FE01FF- 327 0000042F 01FF01FF01FF01FF01- 327 00000438 FF01FF01FF01FF01FF- 327 00000441 01 328 00000442 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 328 0000044B 01FF01FF01FF01FF01- 328 00000454 FF01FF01FE01FE01FE- 328 0000045D 01FE01FE01FE01FE01- 328 00000466 FD01FD01FD01FD01FD- 328 0000046F 01FC01FC01FC01FC01- 328 00000478 FC01FB01FB01FB01FA- 328 00000481 01 329 00000482 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 329 0000048B 01F801F801F801F701- 329 00000494 F701F701F601F601F5- 329 0000049D 01F501F401F401F401- 329 000004A6 F301F301F201F201F1- 329 000004AF 01F101F001F001EF01- 329 000004B8 EE01EE01ED01ED01EC- 329 000004C1 01 330 000004C2 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 330 000004CB 01E801E801E701E601- 330 000004D4 E601E501E401E401E3- 330 000004DD 01E201E201E101E001- 330 000004E6 DF01DF01DE01DD01DC- 330 000004EF 01DB01DB01DA01D901- 330 000004F8 D801D701D701D601D5- 330 00000501 01 331 00000502 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 331 0000050B 01CF01CF01CE01CD01- 331 00000514 CC01CB01CA01C901C8- 331 0000051D 01C701C601C501C401- 331 00000526 C301C201C101C001BF- 331 0000052F 01BE01BD01BC01BB01- 331 00000538 BA01B901B701B601B5- 331 00000541 01 332 00000542 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 332 0000054B 01AF01AD01AC01AB01- 332 00000554 AA01A901A801A601A5- 332 0000055D 01A401A301A201A001- 332 00000566 9F019E019D019B019A- 332 0000056F 019901980196019501- 332 00000578 94019301910190018F- 332 00000581 01 333 00000582 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 333 0000058B 018701860184018301- 333 00000594 820180017F017D017C- 333 0000059D 017B01790178017701- 333 000005A6 750174017201710170- 333 000005AF 016E016D016B016A01- 333 000005B8 680167016601640163- 333 000005C1 01 334 000005C2 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 334 000005CB 015A01590157015601- 334 000005D4 54015301510150014E- 334 000005DD 014D014B014A014801- 334 000005E6 470145014401420141- 334 000005EF 013F013E013C013B01- 334 000005F8 390137013601340133- 334 00000601 01 335 00000602 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 335 0000060B 012A01280127012501- 335 00000614 2301220120011F011D- 335 0000061D 011C011A0119011701- 335 00000626 15011401120111010F- 335 0000062F 010E010C010A010901- 335 00000638 070106010401030101- 335 00000641 01 336 00000642 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 336 0000064B 00F800F600F500F300- 336 00000654 F100F000EE00ED00EB- 336 0000065D 00EA00E800E600E500- 336 00000666 E300E200E000DF00DD- 336 0000066F 00DC00DA00D800D700- 336 00000678 D500D400D200D100CF- 336 00000681 00 337 00000682 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 337 0000068B 00C600C400C300C100- 337 00000694 C000BE00BD00BB00BA- 337 0000069D 00B800B700B500B400- 337 000006A6 B200B100AF00AE00AC- 337 000006AF 00AB00A900A800A600- 337 000006B8 A500A400A200A1009F- 337 000006C1 00 338 000006C2 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 338 000006CB 009700950094009200- 338 000006D4 91008F008E008D008B- 338 000006DD 008A00880087008600- 338 000006E6 84008300820080007F- 338 000006EF 007D007C007B007900- 338 000006F8 780077007500740073- 338 00000701 00 339 00000702 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 339 0000070B 006B006A0069006700- 339 00000714 660065006400620061- 339 0000071D 0060005F005D005C00- 339 00000726 5B005A005900570056- 339 0000072F 005500540053005200- 339 00000738 50004F004E004D004C- 339 00000741 00 340 00000742 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 340 0000074B 004500440043004200- 340 00000754 410040003F003E003D- 340 0000075D 003C003B003A003900- 340 00000766 380037003600350034- 340 0000076F 003300320031003000- 340 00000778 30002F002E002D002C- 340 00000781 00 341 00000782 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 341 0000078B 002700260025002400- 341 00000794 240023002200210020- 341 0000079D 0020001F001E001D00- 341 000007A6 1D001C001B001B001A- 341 000007AF 001900190018001700- 341 000007B8 170016001500150014- 341 000007C1 00 342 000007C2 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 342 000007CB 00110010000F000F00- 342 000007D4 0E000E000D000D000C- 342 000007DD 000C000B000B000B00- 342 000007E6 0A000A000900090008- 342 000007EF 000800080007000700- 342 000007F8 070006000600060005- 342 00000801 00 343 00000802 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 343 0000080B 000300030003000300- 343 00000814 030002000200020002- 343 0000081D 000200010001000100- 343 00000826 010001000100010000- 343 0000082F 000000000000000000- 343 00000838 000000000000000000- 343 00000841 00 344 00000842 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 344 0000084B 000000000000000000- 344 00000854 000000000100010001- 344 0000085D 000100010001000100- 344 00000866 020002000200020002- 344 0000086F 000300030003000300- 344 00000878 030004000400040005- 344 00000881 00 345 00000882 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 345 0000088B 000700070007000800- 345 00000894 08000800090009000A- 345 0000089D 000A000B000B000B00- 345 000008A6 0C000C000D000D000E- 345 000008AF 000E000F000F001000- 345 000008B8 110011001200120013- 345 000008C1 00 346 000008C2 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 346 000008CB 001700170018001900- 346 000008D4 19001A001B001B001C- 346 000008DD 001D001D001E001F00- 346 000008E6 200020002100220023- 346 000008EF 002400240025002600- 346 000008F8 27002800280029002A- 346 00000901 00 347 00000902 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 347 0000090B 003000300031003200- 347 00000914 330034003500360037- 347 0000091D 00380039003A003B00- 347 00000926 3C003D003E003F0040- 347 0000092F 004100420043004400- 347 00000938 45004600480049004A- 347 00000941 00 348 00000942 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 348 0000094B 005000520053005400- 348 00000954 55005600570059005A- 348 0000095D 005B005C005D005F00- 348 00000966 600061006200640065- 348 0000096F 006600670069006A00- 348 00000978 6B006C006E006F0070- 348 00000981 00 349 00000982 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 349 0000098B 00780079007B007C00- 349 00000994 7D007F008000820083- 349 0000099D 008400860087008800- 349 000009A6 8A008B008D008E008F- 349 000009AF 009100920094009500- 349 000009B8 9700980099009B009C- 349 000009C1 00 350 000009C2 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 350 000009CB 00A500A600A800A900- 350 000009D4 AB00AC00AE00AF00B1- 350 000009DD 00B200B400B500B700- 350 000009E6 B800BA00BB00BD00BE- 350 000009EF 00C000C100C300C400- 350 000009F8 C600C800C900CB00CC- 350 00000A01 00 351 00000A02 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 351 00000A0B 00D500D700D800DA00- 351 00000A14 DC00DD00DF00E000E2- 351 00000A1D 00E300E500E600E800- 351 00000A26 EA00EB00ED00EE00F0- 351 00000A2F 00F100F300F500F600- 351 00000A38 F800F900FB00FC00FE- 351 00000A41 00 352 353 bss: 354 355 ABSOLUTE bss 356 357 00000A42 alignb 4 358 359 00000A44 color: resd 1 360 00000A48 prevx: resd 1 361 ;prevy: resd 1 362 363 bss_start: 364 00000A4C _fx: resd 1024 ; for every X values from 0 to 1023 365 00001A4C resd 4096-1024 ; used for repetitive x values for continuity 366 bss_end: