1 ; **************************************************************************** 2 ; circle2.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 14/02/2021 6 ; 7 ; **************************************************************************** 8 ; nasm circle2.s -l circle2.txt -o CIRCLE2.PRG -Z error.txt 9 ; (modified from 'circle1.s', 14/02/2021) 10 11 ; Draw circle by using 'sysvideo' bh=3 (VESA VBE mode version) 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[8C050000] mov edi, bss_start 92 00000005 B908020000 mov ecx, (bss_end - bss_start)/4 93 ;xor eax, eax 94 0000000A F3AB rep stosd 95 96 ; program message 97 0000000C BE[40040000] mov esi, program_msg 98 00000011 E8D4010000 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 ; edx = 0 (do not return LFB Info) 106 107 ; Set Video Mode to 101h ; 640x480, 256 colors 108 sys _video, 08FFh, 101h 108 <1> 108 <1> 108 <1> 108 <1> 108 <1> %if %0 >= 2 108 0000001A BBFF080000 <1> mov ebx, %2 108 <1> %if %0 >= 3 108 0000001F B901010000 <1> mov ecx, %3 108 <1> %if %0 = 4 108 <1> mov edx, %4 108 <1> %endif 108 <1> %endif 108 <1> %endif 108 00000024 B81F000000 <1> mov eax, %1 108 <1> 108 00000029 CD40 <1> int 40h 109 0000002B 09C0 or eax, eax 110 ;jz short terminate 111 ;mov [LFB_ADDR], edx ; pointer to LFB info table/structure 112 0000002D 744D jz short terminate 113 114 set_vesa_mode_101h_ok: 115 ; Set squares of number from 0 to 255 116 0000002F BF[8C050000] mov edi, _squares 117 00000034 B900010000 mov ecx, 256 118 00000039 BB01000000 mov ebx, 1 119 _ss_x: 120 0000003E 89D8 mov eax, ebx 121 00000040 F7E3 mul ebx 122 00000042 AB stosd 123 00000043 43 inc ebx 124 00000044 E2F8 loop _ss_x 125 reset_color: 126 00000046 C605[98090000]8E mov byte [color], 142 ; initial color 127 reset_diameter: 128 0000004D B8F0000000 mov eax, 240 ; initial diameter 129 newdiameter: 130 ; Set radius to 240 131 ;mov dword [radius], 240 132 ;mov dword [_r2], 57600 133 00000052 A3[90090000] mov [radius], eax 134 00000057 89C3 mov ebx, eax 135 00000059 F7E3 mul ebx 136 0000005B A3[94090000] mov [_r2], eax ; square of circle radius 137 ; x2+y2 = r2 138 ; Set Y values for X values from 1 to Radius - 1 139 00000060 BF[AC090000] mov edi, _fx 140 _yy_x: 141 00000065 4B dec ebx 142 00000066 7422 jz short center 143 00000068 89D8 mov eax, ebx 144 0000006A F7E0 mul eax 145 ; eax = square of ebx 146 0000006C 8B15[94090000] mov edx, [_r2] 147 00000072 29C2 sub edx, eax 148 00000074 E8A6030000 call get_squareroot 149 00000079 AB stosd 150 0000007A EBE9 jmp short _yy_x 151 152 ; *** 153 154 terminate: 155 0000007C E8B8030000 call set_text_mode 156 sys _exit 156 <1> 156 <1> 156 <1> 156 <1> 156 <1> %if %0 >= 2 156 <1> mov ebx, %2 156 <1> %if %0 >= 3 156 <1> mov ecx, %3 156 <1> %if %0 = 4 156 <1> mov edx, %4 156 <1> %endif 156 <1> %endif 156 <1> %endif 156 00000081 B801000000 <1> mov eax, %1 156 <1> 156 00000086 CD40 <1> int 40h 157 halt: 158 00000088 EBFE jmp short halt 159 160 ; *** 161 162 ; move circle to center of screen 163 center: 164 0000008A E8D9020000 call movecenter 165 _0: 166 0000008F E867010000 call drawcircle 167 waitforkey: 168 00000094 B401 mov ah, 1 169 00000096 CD32 int 32h 170 00000098 740A jz short getkey 171 0000009A 66FF05[8C090000] inc word [counter] 172 000000A1 90 nop 173 000000A2 EBF0 jmp short waitforkey 174 getkey: 175 000000A4 30E4 xor ah, ah 176 000000A6 CD32 int 32h 177 178 000000A8 663D032E cmp ax, 2E03h 179 000000AC 74CE je short terminate 180 000000AE 3C1B cmp al, 1Bh ; ESC key 181 000000B0 74CA je short terminate 182 183 000000B2 3C2B cmp al, '+' 184 000000B4 7511 jne short _1 185 186 000000B6 A1[90090000] mov eax, [radius] 187 188 000000BB 3CEF cmp al, 239 189 000000BD 734C jnb short _3_ ; beep 190 191 ; delete circle by drawing black circle 192 ; with same diameter and at same coordinate 193 000000BF E833030000 call black_circle 194 ; increase radius of the circle 195 000000C4 40 inc eax 196 ;mov [radius], eax 197 000000C5 EB8B jmp newdiameter ; draw with new diameter 198 _1: 199 000000C7 3C2D cmp al, '-' 200 000000C9 7514 jne short _2 201 202 000000CB A1[90090000] mov eax, [radius] 203 204 000000D0 3C01 cmp al, 1 205 000000D2 7637 jna short _3_ ; beep 206 207 ; delete circle by drawing black circle 208 ; with same diameter and at same coordinate 209 000000D4 E81E030000 call black_circle 210 ; decrease radius of the circle 211 000000D9 48 dec eax 212 ;mov [radius], eax 213 000000DA E973FFFFFF jmp newdiameter ; draw with new diameter 214 _2: 215 000000DF 3C20 cmp al, 20h ; space 216 000000E1 7509 jne short _3 217 000000E3 8005[98090000]08 add byte [color], 8 218 000000EA EBA3 jmp short _0 219 _3: 220 000000EC 80FC4B cmp ah, 4Bh 221 000000EF 7521 jne short _4 222 ; left arrow 223 000000F1 A1[90090000] mov eax, [radius] 224 000000F6 3B05[9C090000] cmp eax, [_x0] 225 000000FC 730D jnb short _3_ 226 000000FE E8F4020000 call black_circle ; clear current position 227 00000103 FF0D[9C090000] dec dword [_x0] 228 00000109 EB84 jmp _0 ; draw 229 _3_: 230 0000010B E8FD020000 call beep 231 00000110 EB82 jmp waitforkey 232 _4: 233 00000112 80FC4D cmp ah, 4Dh 234 00000115 7522 jne short _5 235 236 ; right arrow 237 00000117 A1[90090000] mov eax, [radius] 238 0000011C 0305[9C090000] add eax, [_x0] 239 00000122 3D7F020000 cmp eax, 639 240 00000127 73E2 jnb short _3_ 241 00000129 E8C9020000 call black_circle ; clear current position 242 0000012E FF05[9C090000] inc dword [_x0] 243 00000134 E956FFFFFF jmp _0 ; draw 244 _5: 245 00000139 80FC50 cmp ah, 50h 246 0000013C 7522 jne short _6 247 ; down arrow 248 0000013E A1[90090000] mov eax, [radius] 249 00000143 0305[A0090000] add eax, [_y0] 250 00000149 3DDF010000 cmp eax, 479 251 0000014E 73BB jnb short _3_ 252 00000150 E8A2020000 call black_circle ; clear current position 253 00000155 FF05[A0090000] inc dword [_y0] 254 0000015B E92FFFFFFF jmp _0 ; draw 255 _6: 256 00000160 80FC48 cmp ah, 48h 257 00000163 751D jne short _7 258 ; up arrow 259 00000165 A1[90090000] mov eax, [radius] 260 0000016A 3B05[A0090000] cmp eax, [_y0] 261 00000170 7399 jnb short _3_ 262 00000172 E880020000 call black_circle ; clear current position 263 00000177 FF0D[A0090000] dec dword [_y0] 264 0000017D E90DFFFFFF jmp _0 ; draw 265 _7: 266 00000182 80FC47 cmp ah, 47h ; Home key 267 00000185 750F jne short _8 268 00000187 E86B020000 call black_circle ; clear current position 269 0000018C E87C020000 call beep 270 00000191 E9B7FEFFFF jmp reset_diameter 271 ; reset diameter, move to center 272 _8: 273 00000196 80FC4F cmp ah, 4Fh ; End key 274 00000199 750F jne short _9 275 0000019B E857020000 call black_circle ; clear current position 276 000001A0 E868020000 call beep 277 000001A5 E99CFEFFFF jmp reset_color 278 ; reset color and diameter, move to center 279 _9: 280 000001AA 663D0D1C cmp ax, 1C0Dh 281 000001AE 7509 jne short _10 282 000001B0 8005[98090000]04 add byte [color], 4 283 000001B7 EB22 jmp short _14 284 _10: 285 000001B9 80FC53 cmp ah, 53h ; INSERT 286 000001BC 741D je short _14 287 _11: 288 000001BE 80FC52 cmp ah, 52h ; DEL 289 000001C1 7418 je short _14 290 _12: 291 000001C3 80FC49 cmp ah, 49h ; Page UP 292 000001C6 7508 jne short _13 293 000001C8 FE0D[98090000] dec byte [color] 294 000001CE EB0B jmp short _14 295 _13: 296 000001D0 80FC51 cmp ah, 51h ; Page Down 297 000001D3 7510 jne short _15 298 000001D5 FE05[98090000] inc byte [color] 299 _14: 300 000001DB E82D020000 call beep 301 000001E0 E9AAFEFFFF jmp _0 302 _15: 303 000001E5 E9AAFEFFFF jmp waitforkey 304 305 print_msg: 306 000001EA B40E mov ah, 0Eh 307 000001EC BB07000000 mov ebx, 7 308 ;mov bl, 7 ; char attribute & color 309 p_next_chr: 310 000001F1 AC lodsb 311 000001F2 08C0 or al, al 312 000001F4 7404 jz short p_retn ; retn 313 000001F6 CD31 int 31h 314 000001F8 EBF7 jmp short p_next_chr 315 p_retn: 316 000001FA C3 retn 317 318 drawcircle: 319 ; INPUT: 320 ; [_x0] 321 ; [_y0] 322 ; [radius] 323 ; [color] 324 ; 325 ; Modified registers: esi, eax, ecx, ebx, edx 326 _dc_ph0: 327 ; quarter 1 328 ; start from y = 0, x = radius 329 000001FB 31C0 xor eax, eax 330 000001FD A3[A8090000] mov [_y1], eax ; 0 331 00000202 A2[8E090000] mov [phase], al ; 0 332 00000207 8B2D[90090000] mov ebp, [radius] 333 0000020D 892D[A4090000] mov [_x1], ebp ; y = 0, x = r 334 00000213 BE[AC090000] mov esi, _fx 335 _dc_ph0_n: 336 00000218 FF0D[A4090000] dec dword [_x1] 337 0000021E AD lodsd 338 _dc_ph0_x: 339 0000021F 8B15[A8090000] mov edx, [_y1] 340 00000225 42 inc edx 341 00000226 39C2 cmp edx, eax 342 00000228 7314 jnb short _dc_ph0_y 343 0000022A 50 push eax 344 0000022B 8915[A8090000] mov [_y1], edx 345 00000231 E847010000 call get_start_offset 346 00000236 E818010000 call write_pixel 347 0000023B 58 pop eax 348 0000023C EBE1 jmp short _dc_ph0_x 349 _dc_ph0_y: 350 0000023E A3[A8090000] mov [_y1], eax 351 00000243 E835010000 call get_start_offset 352 00000248 E806010000 call write_pixel 353 0000024D 4D dec ebp 354 0000024E 75C8 jnz short _dc_ph0_n 355 _dc_ph1: 356 ; quarter 2 357 ; start from y = radius, x = 0 358 00000250 FE05[8E090000] inc byte [phase] 359 00000256 31C0 xor eax, eax 360 00000258 A3[A4090000] mov [_x1], eax ; 0 361 0000025D 8B2D[90090000] mov ebp, [radius] 362 00000263 892D[A8090000] mov [_y1], ebp ; y = r, x = 0 363 00000269 BE[AC090000] mov esi, _fx 364 _dc_ph1_n: 365 0000026E FF0D[A8090000] dec dword [_y1] 366 00000274 AD lodsd 367 _dc_ph1_x: 368 00000275 8B15[A4090000] mov edx, [_x1] 369 0000027B 42 inc edx 370 0000027C 39C2 cmp edx, eax 371 0000027E 7314 jnb short _dc_ph1_y 372 00000280 50 push eax 373 00000281 8915[A4090000] mov [_x1], edx 374 00000287 E8F1000000 call get_start_offset 375 0000028C E8C2000000 call write_pixel 376 00000291 58 pop eax 377 00000292 EBE1 jmp short _dc_ph1_x 378 _dc_ph1_y: 379 00000294 A3[A4090000] mov [_x1], eax 380 00000299 E8DF000000 call get_start_offset 381 0000029E E8B0000000 call write_pixel 382 000002A3 4D dec ebp 383 000002A4 75C8 jnz short _dc_ph1_n 384 _dc_ph2: 385 ; quarter 3 386 ; start from y = 0, x = radius 387 000002A6 FE05[8E090000] inc byte [phase] 388 000002AC 31C0 xor eax, eax 389 000002AE A3[A8090000] mov [_y1], eax ; 0 390 000002B3 8B2D[90090000] mov ebp, [radius] 391 000002B9 892D[A4090000] mov [_x1], ebp ; y = 0, x = r 392 000002BF BE[AC090000] mov esi, _fx 393 _dc_ph2_n: 394 000002C4 FF0D[A4090000] dec dword [_x1] 395 000002CA AD lodsd 396 _dc_ph2_x: 397 000002CB 8B15[A8090000] mov edx, [_y1] 398 000002D1 42 inc edx 399 000002D2 39C2 cmp edx, eax 400 000002D4 7314 jnb short _dc_ph2_y 401 000002D6 50 push eax 402 000002D7 8915[A8090000] mov [_y1], edx 403 000002DD E89B000000 call get_start_offset 404 000002E2 E86C000000 call write_pixel 405 000002E7 58 pop eax 406 000002E8 EBE1 jmp short _dc_ph2_x 407 _dc_ph2_y: 408 000002EA A3[A8090000] mov [_y1], eax 409 000002EF E889000000 call get_start_offset 410 000002F4 E85A000000 call write_pixel 411 000002F9 4D dec ebp 412 000002FA 75C8 jnz short _dc_ph2_n 413 _dc_ph3: 414 ; quarter 4 415 ; start from y = radius, x = 0 416 000002FC FE05[8E090000] inc byte [phase] 417 00000302 31C0 xor eax, eax 418 00000304 A3[A4090000] mov [_x1], eax ; 0 419 00000309 8B2D[90090000] mov ebp, [radius] 420 0000030F 892D[A8090000] mov [_y1], ebp ; y = r, x = 0 421 00000315 BE[AC090000] mov esi, _fx 422 _dc_ph3_n: 423 0000031A FF0D[A8090000] dec dword [_y1] 424 00000320 AD lodsd 425 _dc_ph3_x: 426 00000321 8B15[A4090000] mov edx, [_x1] 427 00000327 42 inc edx 428 00000328 39C2 cmp edx, eax 429 0000032A 7314 jnb short _dc_ph3_y 430 0000032C 50 push eax 431 0000032D 8915[A4090000] mov [_x1], edx 432 00000333 E845000000 call get_start_offset 433 00000338 E816000000 call write_pixel 434 0000033D 58 pop eax 435 0000033E EBE1 jmp short _dc_ph3_x 436 _dc_ph3_y: 437 00000340 A3[A4090000] mov [_x1], eax 438 00000345 E833000000 call get_start_offset 439 0000034A E804000000 call write_pixel 440 0000034F 4D dec ebp 441 00000350 75C8 jnz short _dc_ph3_n 442 _dc_ph4: 443 00000352 C3 retn 444 445 write_pixel: 446 sys _video, 0301h, [color], eax 446 <1> 446 <1> 446 <1> 446 <1> 446 <1> %if %0 >= 2 446 00000353 BB01030000 <1> mov ebx, %2 446 <1> %if %0 >= 3 446 00000358 8B0D[98090000] <1> mov ecx, %3 446 <1> %if %0 = 4 446 0000035E 89C2 <1> mov edx, %4 446 <1> %endif 446 <1> %endif 446 <1> %endif 446 00000360 B81F000000 <1> mov eax, %1 446 <1> 446 00000365 CD40 <1> int 40h 447 00000367 C3 retn 448 449 movecenter: 450 00000368 C705[9C090000]4001- mov dword [_x0], 640/2 450 00000370 0000 451 00000372 C705[A0090000]F000- mov dword [_y0], 480/2 451 0000037A 0000 452 0000037C C3 retn 453 454 get_start_offset: 455 0000037D B880020000 mov eax, 640 456 00000382 8B15[A0090000] mov edx, [_y0] 457 00000388 803D[8E090000]00 cmp byte [phase], 0 458 0000038F 7715 ja short gso_1 459 gso_0: 460 ; quarter 1 461 00000391 2B15[A8090000] sub edx, [_y1] ; y = 0 -> r 462 00000397 F7E2 mul edx 463 00000399 0305[9C090000] add eax, [_x0] 464 0000039F 0305[A4090000] add eax, [_x1] ; x = r -> 0 465 000003A5 C3 retn 466 gso_1: 467 000003A6 803D[8E090000]01 cmp byte [phase], 1 468 000003AD 7715 ja short gso_2 469 ; quarter 2 470 000003AF 2B15[A8090000] sub edx, [_y1] ; y = r -> 0 471 000003B5 F7E2 mul edx 472 000003B7 0305[9C090000] add eax, [_x0] 473 000003BD 2B05[A4090000] sub eax, [_x1] ; x = 0 -> -r 474 000003C3 C3 retn 475 gso_2: 476 000003C4 803D[8E090000]02 cmp byte [phase], 2 477 000003CB 7715 ja short gso_3 478 ; quarter 3 479 000003CD 0315[A8090000] add edx, [_y1] ; y = 0 -> -r 480 000003D3 F7E2 mul edx 481 000003D5 0305[9C090000] add eax, [_x0] 482 000003DB 2B05[A4090000] sub eax, [_x1] ; x = -r -> 0 483 000003E1 C3 retn 484 gso_3: 485 ; quarter 4 486 000003E2 0315[A8090000] add edx, [_y1] ; y = -r -> 0 487 000003E8 F7E2 mul edx 488 000003EA 0305[9C090000] add eax, [_x0] 489 000003F0 0305[A4090000] add eax, [_x1] ; x = 0 -> r 490 000003F6 C3 retn 491 492 black_circle: 493 000003F7 30E4 xor ah, ah 494 000003F9 8625[98090000] xchg [color], ah ; color = 0 495 000003FF 50 push eax 496 00000400 E8F6FDFFFF call drawcircle 497 00000405 58 pop eax 498 00000406 8625[98090000] xchg [color], ah ; restore color 499 0000040C C3 retn 500 501 beep: 502 ; call beep function (16/64 second, 886Hz) 503 sys _audio, 16, 1331 503 <1> 503 <1> 503 <1> 503 <1> 503 <1> %if %0 >= 2 503 0000040D BB10000000 <1> mov ebx, %2 503 <1> %if %0 >= 3 503 00000412 B933050000 <1> mov ecx, %3 503 <1> %if %0 = 4 503 <1> mov edx, %4 503 <1> %endif 503 <1> %endif 503 <1> %endif 503 00000417 B820000000 <1> mov eax, %1 503 <1> 503 0000041C CD40 <1> int 40h 504 0000041E C3 retn 505 506 get_squareroot: 507 ; input: edx = square of the number (y) 508 ; output: eax = approx. square root of ebx 509 0000041F BE[8C050000] mov esi, _squares 510 00000424 53 push ebx 511 00000425 31DB xor ebx, ebx 512 ;mov ecx, 256 513 00000427 8B0D[90090000] mov ecx, [radius] ; max. value of radius is 256 514 q_sr_x: 515 0000042D AD lodsd 516 0000042E 39D0 cmp eax, edx 517 00000430 7303 jnb short q_sr_ok 518 00000432 43 inc ebx 519 00000433 E2F8 loop q_sr_x 520 q_sr_ok: 521 00000435 89D8 mov eax, ebx 522 00000437 5B pop ebx 523 00000438 C3 retn 524 525 set_text_mode: 526 00000439 30E4 xor ah, ah 527 0000043B B003 mov al, 3 528 ;int 10h ; al = 03h text mode, int 10 video 529 0000043D CD31 int 31h ; TRDOS 386 - Video interrupt 530 0000043F C3 retn 531 532 program_msg: 533 00000440 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Draw Circle" 533 00000449 2076322E302E33202D- 533 00000452 202827737973766964- 533 0000045B 656F27292054657374- 533 00000464 2050726F6772616D20- 533 0000046D 2D2044726177204369- 533 00000476 72636C65 534 0000047A 0D0A db 0Dh, 0Ah 535 0000047C 6279204572646F6761- db "by Erdogan Tan - 14/02/2021" 535 00000485 6E2054616E202D2031- 535 0000048E 342F30322F32303231 536 ;db 0Dh, 0Ah, 0 537 00000497 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 538 539 0000049B 557365204172726F77- db "Use Arrow Keys, Home, End to move the CIRCLE .." 539 000004A4 204B6579732C20486F- 539 000004AD 6D652C20456E642074- 539 000004B6 6F206D6F7665207468- 539 000004BF 6520434952434C4520- 539 000004C8 2E2E 540 000004CA 0D0A db 0Dh, 0Ah 541 000004CC 557365202B2C2D206B- db "Use +,- keys to increase and decrease DIAMETER .." 541 000004D5 65797320746F20696E- 541 000004DE 63726561736520616E- 541 000004E7 642064656372656173- 541 000004F0 65204449414D455445- 541 000004F9 52202E2E 542 000004FD 0D0A db 0Dh, 0Ah 543 000004FF 55736520454E544552- db "Use ENTER key to draw CIRCLE .." 543 00000508 206B657920746F2064- 543 00000511 72617720434952434C- 543 0000051A 45202E2E 544 0000051E 0D0A db 0Dh, 0Ah 545 00000520 557365205350414345- db "Use SPACE, Pg Up, Pg Down keys to change COLOR .." 545 00000529 2C2050672055702C20- 545 00000532 506720446F776E206B- 545 0000053B 65797320746F206368- 545 00000544 616E676520434F4C4F- 545 0000054D 52202E2E 546 00000551 0D0A db 0Dh, 0Ah 547 00000553 507265737320455343- db "Press ESC to exit .." 547 0000055C 20746F206578697420- 547 00000565 2E2E 548 00000567 0D0A db 0Dh, 0Ah 549 00000569 0D0A db 0Dh, 0Ah 550 0000056B 507265737320616E79- db "Press any key to continue .." 550 00000574 206B657920746F2063- 550 0000057D 6F6E74696E7565202E- 550 00000586 2E 551 nextline: 552 00000587 0D0A00 db 0Dh, 0Ah, 0 553 554 bss: 555 556 ABSOLUTE bss 557 558 0000058A alignb 4 559 560 bss_start: 561 _squares: 562 0000058C resd 256 ; squares of numbers from 0 t0 255 563 counter: 564 0000098C resw 1 565 0000098E phase: resw 1 566 00000990 radius: resd 1 ; Current Radius value 567 00000994 _r2: resd 1 ; Square of R 568 00000998 color: resd 1 569 0000099C _x0: resd 1 570 000009A0 _y0: resd 1 571 000009A4 _x1: resd 1 572 000009A8 _y1: resd 1 573 000009AC _fx: resd 256 ; For every X values from 0 to 255 574 bss_end: