1 ; **************************************************************************** 2 ; sinus11.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 06/03/2021 6 ; 7 ; **************************************************************************** 8 ; nasm sinus11.s -l sinus11.txt -o SINUS11.PRG -Z error.txt 9 ; (modified from 'sinus9.s', 11/03/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[D40A0000] 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[E4010000] mov esi, program_msg 98 00000011 E8C4000000 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 ; Get VESA VBE video bios number 106 ; (vbe2 or vbe3, emulator or not) 107 ;mov ebx, 0906h 108 ;sys _video 109 110 ; get [truecolor] status (24bpp or 32bpp for VBE3 vbios) 111 0000001A BB09090000 mov ebx, 0909h 112 sys _video 64 <1> 65 <1> 66 <1> 67 <1> 68 <1> %if %0 >= 2 69 <1> mov ebx, %2 70 <1> %if %0 >= 3 71 <1> mov ecx, %3 72 <1> %if %0 = 4 73 <1> mov edx, %4 74 <1> %endif 75 <1> %endif 76 <1> %endif 77 0000001F B81F000000 <1> mov eax, %1 78 <1> 79 00000024 CD40 <1> int 40h 113 114 00000026 B918010000 mov ecx, 118h ; VESA VBE video mode (1024x768, 24bpp) 115 116 ;cmp ah, 3 117 ;je short set_vmode 118 ;cmp ah, 2 119 ;;jne terminate ; invalid !? 120 ;jne short set_vmode 121 ;and al, al 122 ;jz short set_vmode ; invalid !? (AL must be >= C0h.) 123 124 0000002B 3C20 cmp al, 32 125 0000002D 7402 je short set_vmode 126 127 ; VBE2 bios or default truecolor bpp is 24 bpp 128 ; so, we are using video mode 144h 129 ; (TRDOS 386 running in emulator or very old hardware!) 130 131 ; BOCHS/QEMU/VBOX emulator 132 0000002F B144 mov cl, 44h ; Bochs/Plex86 video mode 144h 133 ; (1024*768, 32bpp) 134 135 ; Set Video Mode to 118h ; 1024*768, 32 bit true colors 136 ; 137 ; NOTE: NVIDIA GEFORCE FX 550 VIDEO BIOS uses 32bpp 138 ; instead of 24bpp for same VBE video mode numbers. 139 ; So, 118h is 1024*768, 24bpp for BOCHS/QEMU emulator 140 ; but, it is 1024*768, 32 bpp for real computer 141 ; with NVIDIA graphics card and video bios. 142 ; (Also it is -it must be- 32bpp for other new hardware.) 143 144 ;sys _video, 08FFh, 118h 145 set_vmode: 146 ; ecx = VESA VBE video mode 147 sys _video, 08FFh 64 <1> 65 <1> 66 <1> 67 <1> 68 <1> %if %0 >= 2 69 00000031 BBFF080000 <1> mov ebx, %2 70 <1> %if %0 >= 3 71 <1> mov ecx, %3 72 <1> %if %0 = 4 73 <1> mov edx, %4 74 <1> %endif 75 <1> %endif 76 <1> %endif 77 00000036 B81F000000 <1> mov eax, %1 78 <1> 79 0000003B CD40 <1> int 40h 148 0000003D 09C0 or eax, eax 149 ;jz short terminate 150 ;mov [LFB_ADDR], edx ; pointer to LFB info table/structure 151 0000003F 7513 jnz short set_vesa_mode_118h_ok 152 153 terminate: 154 00000041 E85C010000 call set_text_mode 155 00000046 E85E010000 call write_pixel_count 156 sys _exit 64 <1> 65 <1> 66 <1> 67 <1> 68 <1> %if %0 >= 2 69 <1> mov ebx, %2 70 <1> %if %0 >= 3 71 <1> mov ecx, %3 72 <1> %if %0 = 4 73 <1> mov edx, %4 74 <1> %endif 75 <1> %endif 76 <1> %endif 77 0000004B B801000000 <1> mov eax, %1 78 <1> 79 00000050 CD40 <1> int 40h 157 halt: 158 00000052 EBFE jmp short halt 159 160 set_vesa_mode_118h_ok: 161 00000054 C705[C80A0000]0000- mov dword [color], 0FF0000h ; initial pixel color 161 0000005C FF00 162 _0: 163 0000005E 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 00000063 30E4 xor ah, ah 175 00000065 CD32 int 32h 176 177 00000067 663D032E cmp ax, 2E03h 178 0000006B 74D4 je short terminate 179 0000006D 3C1B cmp al, 1Bh ; ESC key 180 0000006F 74D0 je short terminate 181 182 00000071 3C2B cmp al, '+' 183 00000073 7509 jne short _1 184 185 00000075 8305[C80A0000]20 add dword [color], 20h 186 0000007C EBE0 jmp short _0 187 _1: 188 0000007E 3C2D cmp al, '-' 189 00000080 7509 jne short _2 190 191 00000082 832D[C80A0000]20 sub dword [color], 20h 192 00000089 EBD3 jmp short _0 193 _2: 194 0000008B 3C20 cmp al, 20h ; space 195 0000008D 750C jne short _3 196 0000008F 8105[C80A0000]2020- add dword [color], 2020h 196 00000097 0000 197 00000099 EBC3 jmp short _0 198 _3: 199 0000009B 80FC4B cmp ah, 4Bh 200 0000009E 7507 jne short _5 201 ; left arrow 202 _4: 203 000000A0 E8EB000000 call beep 204 000000A5 EBBC jmp waitforkey 205 _5: 206 000000A7 80FC4D cmp ah, 4Dh 207 000000AA 7502 jne short _6 208 209 ; right arrow 210 000000AC EBF2 jmp short _4 211 _6: 212 000000AE 80FC50 cmp ah, 50h 213 000000B1 7502 jne short _7 214 ; down arrow 215 000000B3 EBEB jmp short _4 216 _7: 217 000000B5 80FC48 cmp ah, 48h 218 000000B8 7502 jne short _8 219 ; up arrow 220 000000BA EBE4 jmp short _4 221 _8: 222 000000BC 663D0D1C cmp ax, 1C0Dh 223 000000C0 7511 jne short _9 224 000000C2 E8C9000000 call beep 225 000000C7 8105[C80A0000]1010- add dword [color], 1010h 225 000000CF 0000 226 000000D1 EB8B jmp short _0 227 _9: 228 000000D3 E8B8000000 call beep 229 000000D8 EB89 jmp waitforkey 230 231 print_msg: 232 000000DA B40E mov ah, 0Eh 233 000000DC BB07000000 mov ebx, 7 234 ;mov bl, 7 ; char attribute & color 235 p_next_chr: 236 000000E1 AC lodsb 237 000000E2 08C0 or al, al 238 000000E4 7404 jz short p_retn ; retn 239 000000E6 CD31 int 31h 240 000000E8 EBF7 jmp short p_next_chr 241 p_retn: 242 000000EA 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 1023 252 ; y = +256 to -256 253 ; +256 --> 511 -> screen row position = (512-511)+127 = 128 254 ; -256 --> 0 -> screen row position = (512-0)+127 = 639 255 256 000000EB BE[C5020000] mov esi, sinustable 257 000000F0 BF[D40A0000] mov edi, _fx 258 000000F5 31C0 xor eax, eax 259 000000F7 29DB sub ebx, ebx ; 0 ; x 260 000000F9 31ED xor ebp, ebp ; pixel count 261 000000FB 66AD lodsw 262 000000FD EB45 jmp short _dsw_5 263 _dsw_0: 264 000000FF 66AD lodsw ; ax = 512-y value 265 ; 266 00000101 6639C8 cmp ax, cx ; [prevy] 267 00000104 743E je short _dsw_5 268 00000106 7218 jb short _dsw_3 269 _dsw_1: 270 00000108 6641 inc cx ; previous 512-y 271 0000010A 6639C8 cmp ax, cx 272 0000010D 7635 jna short _dsw_5 273 ; ebx = x 274 ; eax = 512 - y 275 0000010F E81A000000 call _dsw_4 276 00000114 EBF2 jmp short _dsw_1 277 _dsw_2: 278 00000116 50 push eax 279 00000117 E85E000000 call getpixeloffset 280 0000011C AB stosd 281 282 ; temporary - 06/03/2021 283 ;cmp eax, [pcount] ; max. value of pixel offset 284 ;jna short _dsw2_0 285 ;mov [pcount], eax 286 287 ;_dsw2_0: 288 0000011D 58 pop eax 289 0000011E 45 inc ebp ; increase pixel count 290 0000011F C3 retn 291 _dsw_3: 292 00000120 6649 dec cx ; previous 512-y 293 00000122 6639C8 cmp ax, cx 294 00000125 731D jnb short _dsw_5 295 ; ebx = x 296 ; eax = 512 - y 297 00000127 E802000000 call _dsw_4 298 0000012C EBF2 jmp short _dsw_3 299 _dsw_4: 300 0000012E 53 push ebx 301 0000012F 8B1D[CC0A0000] mov ebx, [prevx] 302 00000135 91 xchg eax, ecx ; [prevy] 303 00000136 E8DBFFFFFF call _dsw_2 304 0000013B 91 xchg ecx, eax 305 0000013C 5B pop ebx 306 0000013D FF05[CC0A0000] inc dword [prevx] 307 00000143 C3 retn 308 _dsw_5: 309 00000144 891D[CC0A0000] mov [prevx], ebx ; previous x value 310 0000014A 89C1 mov ecx, eax ; previous 512-y value 311 0000014C E8C5FFFFFF call _dsw_2 312 00000151 43 inc ebx 313 00000152 81FB00040000 cmp ebx, 1024 314 00000158 72A5 jb short _dsw_0 315 316 ; pixel count to be written 317 0000015A 892D[D00A0000] mov [pcount], ebp ; 06/03/2021 318 319 00000160 BE[D40A0000] mov esi, _fx 320 ;mov edx, ebp 321 ; 322 ; edx = pixel count 323 ; esi = user's single color pixel buffer address 324 sys _video, 0305h, [color], ebp 64 <1> 65 <1> 66 <1> 67 <1> 68 <1> %if %0 >= 2 69 00000165 BB05030000 <1> mov ebx, %2 70 <1> %if %0 >= 3 71 0000016A 8B0D[C80A0000] <1> mov ecx, %3 72 <1> %if %0 = 4 73 00000170 89EA <1> mov edx, %4 74 <1> %endif 75 <1> %endif 76 <1> %endif 77 00000172 B81F000000 <1> mov eax, %1 78 <1> 79 00000177 CD40 <1> int 40h 325 326 00000179 C3 retn 327 328 getpixeloffset: 329 ; 32 bit true color pixel offset 330 ; ebx = x position 331 ; eax = 512-y position (<= 512) 332 ; Note: 06/03/2021 modifcation is for QEMU (Bochs) 32bpp 333 ; bug check for vesa vbe mode 144h (1024*768, 32bpp) 334 ; (display page size: 2359296 or 3145728 ?) 335 0000017A BA3F020000 mov edx, 512+63 ; 575 ; 06/03/2021 (sinus11.s) ; 575*1024*3 336 ;mov edx, 512+127 ; 639 ; 02/03/2021 (sinus9.s) ; 639*1024*4 337 0000017F 29C2 sub edx, eax ; convert row position from 512-y 338 ; row = y+127 339 00000181 B800100000 mov eax, 1024*4 ; screen width 340 00000186 F7E2 mul edx 341 00000188 53 push ebx 342 00000189 C1E302 shl ebx, 2 343 0000018C 01D8 add eax, ebx ; add x to y*1024 344 0000018E 5B pop ebx 345 ; eax = pixel offset on display page 346 0000018F C3 retn 347 beep: 348 ; call beep function (16/64 second, 886Hz) 349 sys _audio, 16, 1331 64 <1> 65 <1> 66 <1> 67 <1> 68 <1> %if %0 >= 2 69 00000190 BB10000000 <1> mov ebx, %2 70 <1> %if %0 >= 3 71 00000195 B933050000 <1> mov ecx, %3 72 <1> %if %0 = 4 73 <1> mov edx, %4 74 <1> %endif 75 <1> %endif 76 <1> %endif 77 0000019A B820000000 <1> mov eax, %1 78 <1> 79 0000019F CD40 <1> int 40h 350 000001A1 C3 retn 351 352 set_text_mode: 353 000001A2 30E4 xor ah, ah 354 000001A4 B003 mov al, 3 355 ;int 10h ; al = 03h text mode, int 10 video 356 000001A6 CD31 int 31h ; TRDOS 386 - Video interrupt 357 000001A8 C3 retn 358 359 write_pixel_count: 360 ; 06/03/2021 361 000001A9 A1[D00A0000] mov eax, [pcount] 362 000001AE 09C0 or eax, eax 363 000001B0 7431 jz short wpc_ok 364 000001B2 BF[BD020000] mov edi, pixcstr 365 000001B7 B90A000000 mov ecx, 10 366 000001BC 89E5 mov ebp, esp 367 wpc_0: 368 000001BE 31D2 xor edx, edx 369 000001C0 F7F1 div ecx 370 000001C2 52 push edx 371 000001C3 21C0 and eax, eax 372 000001C5 75F7 jnz short wpc_0 373 wpc_1: 374 000001C7 58 pop eax 375 000001C8 0430 add al, '0' 376 000001CA AA stosb 377 000001CB 39E5 cmp ebp, esp 378 000001CD 77F8 ja short wpc_1 379 380 000001CF BE[AA020000] mov esi, wpixels_msg 381 000001D4 E801FFFFFF call print_msg 382 000001D9 BE[A7020000] mov esi, nextline 383 000001DE E9F7FEFFFF jmp print_msg 384 wpc_ok: 385 000001E3 C3 retn 386 387 program_msg: 388 000001E4 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Draw Sine Wave" 388 000001ED 2076322E302E33202D- 388 000001F6 202827737973766964- 388 000001FF 656F27292054657374- 388 00000208 2050726F6772616D20- 388 00000211 2D2044726177205369- 388 0000021A 6E652057617665 389 00000221 0D0A db 0Dh, 0Ah 390 00000223 6279204572646F6761- db "by Erdogan Tan - 06/03/2021" 390 0000022C 6E2054616E202D2030- 390 00000235 362F30332F32303231 391 ;db 0Dh, 0Ah, 0 392 0000023E 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 393 394 00000242 557365205350414345- db "Use SPACE,ENTER,'+','-' keys to change COLOR .." 394 0000024B 2C454E5445522C272B- 394 00000254 272C272D27206B6579- 394 0000025D 7320746F206368616E- 394 00000266 676520434F4C4F5220- 394 0000026F 2E2E 395 00000271 0D0A db 0Dh, 0Ah 396 00000273 507265737320455343- db "Press ESC to exit .." 396 0000027C 20746F206578697420- 396 00000285 2E2E 397 00000287 0D0A db 0Dh, 0Ah 398 00000289 0D0A db 0Dh, 0Ah 399 0000028B 507265737320616E79- db "Press any key to continue .." 399 00000294 206B657920746F2063- 399 0000029D 6F6E74696E7565202E- 399 000002A6 2E 400 nextline: 401 000002A7 0D0A00 db 0Dh, 0Ah, 0 402 403 wpixels_msg: 404 000002AA 0D0A db 0Dh, 0Ah 405 000002AC 5772697474656E2070- db "Written pixels : " 405 000002B5 6978656C73203A20 406 pixcstr: 407 000002BD 30 db "0" 408 000002BE 000000000000 db 0,0,0,0,0,0 409 000002C4 00 db 0 410 411 sinustable: ; sine wave table (x=0 to 1023, y= +256 to -256) 412 ; 19/02/2021 413 ; https://daycounter.com/Calculators/Sine-Generator-Calculator2.phtml 414 ; 1024x512 (x= 0 to 1023, y = 0 to 511) 415 000002C5 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 415 000002CE 01070109010A010C01- 415 000002D7 0E010F011101120114- 415 000002E0 011501170119011A01- 415 000002E9 1C011D011F01200122- 415 000002F2 012301250127012801- 415 000002FB 2A012B012D012E0130- 415 00000304 01 416 00000305 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 416 0000030E 0139013B013C013E01- 416 00000317 3F0141014201440145- 416 00000320 01470148014A014B01- 416 00000329 4D014E015001510153- 416 00000332 015401560157015901- 416 0000033B 5A015B015D015E0160- 416 00000344 01 417 00000345 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 417 0000034E 0168016A016B016D01- 417 00000357 6E0170017101720174- 417 00000360 017501770178017901- 417 00000369 7B017C017D017F0180- 417 00000372 018201830184018601- 417 0000037B 870188018A018B018C- 417 00000384 01 418 00000385 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 418 0000038E 019401950196019801- 418 00000397 99019A019B019D019E- 418 000003A0 019F01A001A201A301- 418 000003A9 A401A501A601A801A9- 418 000003B2 01AA01AB01AC01AD01- 418 000003BB AF01B001B101B201B3- 418 000003C4 01 419 000003C5 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 419 000003CE 01BA01BB01BC01BD01- 419 000003D7 BE01BF01C001C101C2- 419 000003E0 01C301C401C501C601- 419 000003E9 C701C801C901CA01CB- 419 000003F2 01CC01CD01CE01CF01- 419 000003FB CF01D001D101D201D3- 419 00000404 01 420 00000405 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 420 0000040E 01D801D901DA01DB01- 420 00000417 DB01DC01DD01DE01DF- 420 00000420 01DF01E001E101E201- 420 00000429 E201E301E401E401E5- 420 00000432 01E601E601E701E801- 420 0000043B E801E901EA01EA01EB- 420 00000444 01 421 00000445 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 421 0000044E 01EE01EF01F001F001- 421 00000457 F101F101F201F201F3- 421 00000460 01F301F401F401F401- 421 00000469 F501F501F601F601F7- 421 00000472 01F701F701F801F801- 421 0000047B F801F901F901F901FA- 421 00000484 01 422 00000485 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 422 0000048E 01FC01FC01FC01FC01- 422 00000497 FC01FD01FD01FD01FD- 422 000004A0 01FD01FE01FE01FE01- 422 000004A9 FE01FE01FE01FE01FF- 422 000004B2 01FF01FF01FF01FF01- 422 000004BB FF01FF01FF01FF01FF- 422 000004C4 01 423 000004C5 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 423 000004CE 01FF01FF01FF01FF01- 423 000004D7 FF01FF01FE01FE01FE- 423 000004E0 01FE01FE01FE01FE01- 423 000004E9 FD01FD01FD01FD01FD- 423 000004F2 01FC01FC01FC01FC01- 423 000004FB FC01FB01FB01FB01FA- 423 00000504 01 424 00000505 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 424 0000050E 01F801F801F801F701- 424 00000517 F701F701F601F601F5- 424 00000520 01F501F401F401F401- 424 00000529 F301F301F201F201F1- 424 00000532 01F101F001F001EF01- 424 0000053B EE01EE01ED01ED01EC- 424 00000544 01 425 00000545 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 425 0000054E 01E801E801E701E601- 425 00000557 E601E501E401E401E3- 425 00000560 01E201E201E101E001- 425 00000569 DF01DF01DE01DD01DC- 425 00000572 01DB01DB01DA01D901- 425 0000057B D801D701D701D601D5- 425 00000584 01 426 00000585 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 426 0000058E 01CF01CF01CE01CD01- 426 00000597 CC01CB01CA01C901C8- 426 000005A0 01C701C601C501C401- 426 000005A9 C301C201C101C001BF- 426 000005B2 01BE01BD01BC01BB01- 426 000005BB BA01B901B701B601B5- 426 000005C4 01 427 000005C5 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 427 000005CE 01AF01AD01AC01AB01- 427 000005D7 AA01A901A801A601A5- 427 000005E0 01A401A301A201A001- 427 000005E9 9F019E019D019B019A- 427 000005F2 019901980196019501- 427 000005FB 94019301910190018F- 427 00000604 01 428 00000605 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 428 0000060E 018701860184018301- 428 00000617 820180017F017D017C- 428 00000620 017B01790178017701- 428 00000629 750174017201710170- 428 00000632 016E016D016B016A01- 428 0000063B 680167016601640163- 428 00000644 01 429 00000645 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 429 0000064E 015A01590157015601- 429 00000657 54015301510150014E- 429 00000660 014D014B014A014801- 429 00000669 470145014401420141- 429 00000672 013F013E013C013B01- 429 0000067B 390137013601340133- 429 00000684 01 430 00000685 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 430 0000068E 012A01280127012501- 430 00000697 2301220120011F011D- 430 000006A0 011C011A0119011701- 430 000006A9 15011401120111010F- 430 000006B2 010E010C010A010901- 430 000006BB 070106010401030101- 430 000006C4 01 431 000006C5 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 431 000006CE 00F800F600F500F300- 431 000006D7 F100F000EE00ED00EB- 431 000006E0 00EA00E800E600E500- 431 000006E9 E300E200E000DF00DD- 431 000006F2 00DC00DA00D800D700- 431 000006FB D500D400D200D100CF- 431 00000704 00 432 00000705 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 432 0000070E 00C600C400C300C100- 432 00000717 C000BE00BD00BB00BA- 432 00000720 00B800B700B500B400- 432 00000729 B200B100AF00AE00AC- 432 00000732 00AB00A900A800A600- 432 0000073B A500A400A200A1009F- 432 00000744 00 433 00000745 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 433 0000074E 009700950094009200- 433 00000757 91008F008E008D008B- 433 00000760 008A00880087008600- 433 00000769 84008300820080007F- 433 00000772 007D007C007B007900- 433 0000077B 780077007500740073- 433 00000784 00 434 00000785 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 434 0000078E 006B006A0069006700- 434 00000797 660065006400620061- 434 000007A0 0060005F005D005C00- 434 000007A9 5B005A005900570056- 434 000007B2 005500540053005200- 434 000007BB 50004F004E004D004C- 434 000007C4 00 435 000007C5 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 435 000007CE 004500440043004200- 435 000007D7 410040003F003E003D- 435 000007E0 003C003B003A003900- 435 000007E9 380037003600350034- 435 000007F2 003300320031003000- 435 000007FB 30002F002E002D002C- 435 00000804 00 436 00000805 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 436 0000080E 002700260025002400- 436 00000817 240023002200210020- 436 00000820 0020001F001E001D00- 436 00000829 1D001C001B001B001A- 436 00000832 001900190018001700- 436 0000083B 170016001500150014- 436 00000844 00 437 00000845 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 437 0000084E 00110010000F000F00- 437 00000857 0E000E000D000D000C- 437 00000860 000C000B000B000B00- 437 00000869 0A000A000900090008- 437 00000872 000800080007000700- 437 0000087B 070006000600060005- 437 00000884 00 438 00000885 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 438 0000088E 000300030003000300- 438 00000897 030002000200020002- 438 000008A0 000200010001000100- 438 000008A9 010001000100010000- 438 000008B2 000000000000000000- 438 000008BB 000000000000000000- 438 000008C4 00 439 000008C5 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 439 000008CE 000000000000000000- 439 000008D7 000000000100010001- 439 000008E0 000100010001000100- 439 000008E9 020002000200020002- 439 000008F2 000300030003000300- 439 000008FB 030004000400040005- 439 00000904 00 440 00000905 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 440 0000090E 000700070007000800- 440 00000917 08000800090009000A- 440 00000920 000A000B000B000B00- 440 00000929 0C000C000D000D000E- 440 00000932 000E000F000F001000- 440 0000093B 110011001200120013- 440 00000944 00 441 00000945 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 441 0000094E 001700170018001900- 441 00000957 19001A001B001B001C- 441 00000960 001D001D001E001F00- 441 00000969 200020002100220023- 441 00000972 002400240025002600- 441 0000097B 27002800280029002A- 441 00000984 00 442 00000985 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 442 0000098E 003000300031003200- 442 00000997 330034003500360037- 442 000009A0 00380039003A003B00- 442 000009A9 3C003D003E003F0040- 442 000009B2 004100420043004400- 442 000009BB 45004600480049004A- 442 000009C4 00 443 000009C5 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 443 000009CE 005000520053005400- 443 000009D7 55005600570059005A- 443 000009E0 005B005C005D005F00- 443 000009E9 600061006200640065- 443 000009F2 006600670069006A00- 443 000009FB 6B006C006E006F0070- 443 00000A04 00 444 00000A05 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 444 00000A0E 00780079007B007C00- 444 00000A17 7D007F008000820083- 444 00000A20 008400860087008800- 444 00000A29 8A008B008D008E008F- 444 00000A32 009100920094009500- 444 00000A3B 9700980099009B009C- 444 00000A44 00 445 00000A45 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 445 00000A4E 00A500A600A800A900- 445 00000A57 AB00AC00AE00AF00B1- 445 00000A60 00B200B400B500B700- 445 00000A69 B800BA00BB00BD00BE- 445 00000A72 00C000C100C300C400- 445 00000A7B C600C800C900CB00CC- 445 00000A84 00 446 00000A85 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 446 00000A8E 00D500D700D800DA00- 446 00000A97 DC00DD00DF00E000E2- 446 00000AA0 00E300E500E600E800- 446 00000AA9 EA00EB00ED00EE00F0- 446 00000AB2 00F100F300F500F600- 446 00000ABB F800F900FB00FC00FE- 446 00000AC4 00 447 448 bss: 449 450 ABSOLUTE bss 451 452 00000AC5 ?????? alignb 4 453 454 00000AC8 ???????? color: resd 1 455 00000ACC ???????? prevx: resd 1 456 ;prevy: resd 1 457 00000AD0 ???????? pcount: resd 1 ; 06/03/2021 458 459 bss_start: 460 00000AD4 _fx: resd 1024 ; for every X values from 0 to 1023 461 00001AD4 resd 4096-1024 ; used for repetitive x values for continuity 462 bss_end: