1 ; **************************************************************************** 2 ; svgabox.s - TRDOS 386 (TRDOS v2.0.3) Test Program - LFB data transfers 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 26/01/2021 (25/01/2021) 6 ; 7 ; **************************************************************************** 8 ; nasm svgabox.s -l svgabox.txt -o SVGABOX.PRG -Z error.txt 9 10 ; 14/07/2020 11 ; 31/12/2017 12 ; TRDOS 386 (v2.0) system calls 13 _ver equ 0 14 _exit equ 1 15 _fork equ 2 16 _read equ 3 17 _write equ 4 18 _open equ 5 19 _close equ 6 20 _wait equ 7 21 _create equ 8 22 _rename equ 9 23 _delete equ 10 24 _exec equ 11 25 _chdir equ 12 26 _time equ 13 27 _mkdir equ 14 28 _chmod equ 15 29 _rmdir equ 16 30 _break equ 17 31 _drive equ 18 32 _seek equ 19 33 _tell equ 20 34 _memory equ 21 35 _prompt equ 22 36 _path equ 23 37 _env equ 24 38 _stime equ 25 39 _quit equ 26 40 _intr equ 27 41 _dir equ 28 42 _emt equ 29 43 _ldrvt equ 30 44 _video equ 31 45 _audio equ 32 46 _timer equ 33 47 _sleep equ 34 48 _msg equ 35 49 _geterr equ 36 50 _fpstat equ 37 51 _pri equ 38 52 _rele equ 39 53 _fff equ 40 54 _fnf equ 41 55 _alloc equ 42 56 _dalloc equ 43 57 _calbac equ 44 58 _dma equ 45 59 60 %macro sys 1-4 61 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 62 ; 03/09/2015 63 ; 13/04/2015 64 ; Retro UNIX 386 v1 system call. 65 %if %0 >= 2 66 mov ebx, %2 67 %if %0 >= 3 68 mov ecx, %3 69 %if %0 = 4 70 mov edx, %4 71 %endif 72 %endif 73 %endif 74 mov eax, %1 75 ;int 30h 76 int 40h ; TRDOS 386 (TRDOS v2.0) 77 %endmacro 78 79 ; Retro UNIX 386 v1 system call format: 80 ; sys systemcall (eax) , , 81 82 [BITS 32] ; We need 32-bit intructions for protected mode 83 84 [ORG 0] 85 86 START_CODE: 87 ; clear bss 88 00000000 BF[54050000] mov edi, bss_start 89 00000005 B906100000 mov ecx, (bss_end - bss_start)/4 90 ;xor eax, eax 91 0000000A F3AB rep stosd 92 93 ; program message 94 0000000C BE[50030000] mov esi, program_msg 95 00000011 E81C020000 call print_msg 96 97 ; 26/01/2021 98 00000016 30E4 xor ah, ah 99 ;int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY 100 ; Return: AH = scan code, AL = character 101 00000018 CD32 int 32h ; TRDOS 386 Keyboard interrupt 102 103 ; 25/01/2021 (TRDOS 386 v2.0.3) 104 105 ; DIRECT LINEAR FRAME BUFFER ACCESS 106 ;xor ebx, ebx 107 ;mov bh, 6 ; Direct access/map to LFB address 108 ;mov bl, 5 ; bl = 05h -> 105h, VESA MODE 105h 109 0000001A 66BB0506 mov bx, 605h ; Direct access/map to LFB for VBE video mode 105h 110 ;mov eax, _video ; 1Fh 111 0000001E B81F000000 mov eax, 1Fh ; sys _video ; TRDOS 386 Video functions 112 00000023 CD40 int 40h ; TRDOS 386 system call 113 00000025 09C0 or eax, eax 114 00000027 7437 jz short lfb_error 115 00000029 A3[54050000] mov [LFB_addr], eax 116 117 0000002E C1E810 shr eax, 16 ; ax = high word of LFB address 118 00000031 E8D9020000 call wordtohex 119 00000036 A3[1B050000] mov [lfb_addr_str], eax 120 121 0000003B BE[F0040000] mov esi, msg_lfb_ok 122 00000040 E8ED010000 call print_msg 123 124 00000045 30E4 xor ah, ah 125 ;int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY 126 ; Return: AH = scan code, AL = character 127 00000047 CD32 int 32h ; TRDOS 386 Keyboard interrupt 128 129 ;xor ecx, ecx 130 131 set_vesa_vbe_mode: 132 00000049 66B8024F mov ax, 4F02h ; vbe function 02h, set video mode 133 ;int 10h ; bios video interrupt 134 0000004D 66BB0141 mov bx, 4101h ; vbe mode 101h with LFB (640x480, 256 colors) 135 00000051 CD31 int 31h ; TRDOS 386 - Video interrupt 136 00000053 6683F84F cmp ax, 004Fh 137 00000057 741C je short vbe_mode_set_ok 138 vbe_error: 139 00000059 BE[B0040000] mov esi, msg_vbe_error 140 0000005E EB07 jmp short error 141 lfb_error: 142 00000060 BE[D0040000] mov esi, msg_lfb_error 143 00000065 EB00 jmp short error 144 error: 145 00000067 E8C6010000 call print_msg 146 _terminate: 147 sys _exit 147 <1> 147 <1> 147 <1> 147 <1> 147 <1> %if %0 >= 2 147 <1> mov ebx, %2 147 <1> %if %0 >= 3 147 <1> mov ecx, %3 147 <1> %if %0 = 4 147 <1> mov edx, %4 147 <1> %endif 147 <1> %endif 147 <1> %endif 147 0000006C B801000000 <1> mov eax, %1 147 <1> 147 00000071 CD40 <1> int 40h 148 _hang: 149 00000073 EBFE jmp short _hang 150 151 vbe_mode_set_ok: 152 ; create a box and the center of 640x480 screen 153 reset: 154 00000075 B380 mov bl, 128 ; color 155 00000077 881D[64050000] mov [boxcolor], bl 156 0000007D 881D[65050000] mov [color], bl 157 158 00000083 B140 mov cl, 64 159 00000085 880D[60050000] mov [boxsize], cl 160 161 ; BL = Box (Square) Color 162 ; CL = Box (Square) Size 163 0000008B E8B3010000 call colorbox 164 165 ; move colorbox to center of screen 166 center: 167 00000090 E84E020000 call movecenter 168 _0: 169 00000095 E8BA010000 call drawbox 170 171 waitforkey: 172 0000009A B401 mov ah, 1 173 0000009C CD32 int 32h 174 0000009E 740B jz short getkey 175 000000A0 FF05[68050000] inc dword [counter] 176 000000A6 90 nop 177 000000A7 90 nop 178 000000A8 90 nop 179 000000A9 EBEF jmp short waitforkey 180 getkey: 181 000000AB 30E4 xor ah, ah 182 000000AD CD32 int 32h 183 184 000000AF 663D032E cmp ax, 2E03h 185 000000B3 0F8466010000 je terminate 186 000000B9 3C1B cmp al, 1Bh ; ESC key 187 000000BB 0F845E010000 je terminate 188 189 000000C1 3C2B cmp al, '+' 190 000000C3 7521 jne short _2 191 192 ; black box (clear box) 193 000000C5 803D[60050000]78 cmp byte [boxsize], 120 194 000000CC 77CC ja short waitforkey 195 196 ; clear 197 ;mov byte [color], 0 198 000000CE E8AB010000 call drawbox_x 199 200 ; increase box size 201 000000D3 8005[60050000]08 add byte [boxsize], 8 202 _1: 203 000000DA A0[64050000] mov al, [boxcolor] 204 000000DF A2[65050000] mov [color], al 205 000000E4 EBAF jmp short _0 206 _2: 207 000000E6 3C2D cmp al, '-' 208 000000E8 7517 jne short _3 209 210 ; black box (clear box) 211 000000EA 803D[60050000]48 cmp byte [boxsize], 72 212 000000F1 720E jb short _3 213 214 ; clear 215 ;mov byte [color], 0 216 000000F3 E886010000 call drawbox_x 217 218 ; decrease box size 219 000000F8 802D[60050000]08 sub byte [boxsize], 8 220 000000FF EBD9 jmp short _1 221 _3: 222 00000101 3C20 cmp al, 20h ; space 223 00000103 7509 jne short _4 224 ;inc byte [boxcolor] 225 ;xor byte [ctype], 1 ; 26/01/2021 226 00000105 8005[64050000]08 add byte [boxcolor], 8 227 0000010C EBCC jmp short _1 228 _4: 229 0000010E 80FC4B cmp ah, 4Bh 230 00000111 751D jne short _5 231 232 ; left arrow 233 00000113 66833D[5C050000]04 cmp word [x_pos], 4 234 0000011B 0F8279FFFFFF jb waitforkey 235 ;cmp word [x_pos], 0 ; 26/01/2021 236 ;jna waitforkey 237 238 ; clear 239 ;mov byte [color], 0 240 00000121 E858010000 call drawbox_x 241 242 00000126 66832D[5C050000]04 sub word [x_pos], 4 243 ;dec word [x_pos] ; 26/01/2021 244 0000012E EBAA jmp short _1 245 _5: 246 00000130 80FC4D cmp ah, 4Dh 247 00000133 752A jne short _6 248 249 ; right arrow 250 00000135 8B0D[5C050000] mov ecx, [x_pos] 251 0000013B 030D[60050000] add ecx, [boxsize] 252 00000141 81F97C020000 cmp ecx, 636 253 ;cmp ecx, 639 ; 26/01/2021 254 00000147 0F874DFFFFFF ja waitforkey 255 256 ; clear 257 ;mov byte [color], 0 258 0000014D E82C010000 call drawbox_x 259 260 00000152 668305[5C050000]04 add word [x_pos], 4 261 ;inc word [x_pos] ; 26/01/2021 262 0000015A E97BFFFFFF jmp _1 263 _6: 264 0000015F 80FC50 cmp ah, 50h 265 00000162 752A jne short _7 266 267 ; down arrow 268 00000164 8B0D[58050000] mov ecx, [y_pos] 269 0000016A 030D[60050000] add ecx, [boxsize] 270 00000170 81F9DC010000 cmp ecx, 476 271 ;cmp ecx, 479 ; 26/01/2021 272 00000176 0F871EFFFFFF ja waitforkey 273 274 ; clear 275 ;mov byte [color], 0 276 0000017C E8FD000000 call drawbox_x 277 278 00000181 668305[58050000]04 add word [y_pos], 4 279 ;inc word [y_pos] ; 26/01/2021 280 00000189 E94CFFFFFF jmp _1 281 _7: 282 0000018E 80FC48 cmp ah, 48h 283 00000191 7520 jne short _8 284 285 ; up arrow 286 00000193 66833D[58050000]04 cmp word [y_pos], 4 287 0000019B 0F82F9FEFFFF jb waitforkey 288 ;cmp word [y_pos], 0 ; 26/01/2021 289 ;jna waitforkey 290 291 ; clear 292 ;mov byte [color], 0 293 000001A1 E8D8000000 call drawbox_x 294 295 000001A6 66832D[58050000]04 sub word [y_pos], 4 296 ;dec word [y_pos] ; 26/01/2021 297 000001AE E927FFFFFF jmp _1 298 _8: 299 000001B3 80FC47 cmp ah, 47h ; Home key 300 000001B6 7505 jne short _9 301 000001B8 E9D3FEFFFF jmp center 302 _9: 303 000001BD 80FC4F cmp ah, 4Fh ; End key 304 000001C0 7505 jne short _10 305 000001C2 E9AEFEFFFF jmp reset 306 _10: 307 000001C7 663D0D1C cmp ax, 1C0Dh 308 ;jne waitforkey 309 000001CB 750C jne short _11 ; 26/01/2021 310 000001CD 8005[64050000]04 add byte [boxcolor], 4 311 000001D4 E901FFFFFF jmp _1 312 ; 26/01/2021 313 _11: 314 000001D9 80FC53 cmp ah, 53h ; INSERT 315 000001DC 750C jne short _12 316 ;mov byte [ctype], 1 ; frame 317 000001DE 8035[66050000]01 xor byte [ctype], 1 318 000001E5 E9B0FEFFFF jmp waitforkey 319 _12: 320 000001EA 80FC52 cmp ah, 52h ; DEL 321 000001ED 750C jne short _13 322 ;mov byte [ctype], 0 ; box 323 000001EF 8035[66050000]01 xor byte [ctype], 1 324 000001F6 E99FFEFFFF jmp waitforkey 325 _13: 326 000001FB 80FC49 cmp ah, 49h ; Page UP 327 000001FE 750B jne short _14 328 00000200 FE0D[64050000] dec byte [boxcolor] 329 00000206 E9CFFEFFFF jmp _1 330 _14: 331 0000020B 80FC51 cmp ah, 51h ; Page Down 332 0000020E 0F8586FEFFFF jne waitforkey 333 00000214 FE05[64050000] inc byte [boxcolor] 334 0000021A E9BBFEFFFF jmp _1 335 336 terminate: 337 0000021F E825010000 call set_text_mode 338 sys _exit 338 <1> 338 <1> 338 <1> 338 <1> 338 <1> %if %0 >= 2 338 <1> mov ebx, %2 338 <1> %if %0 >= 3 338 <1> mov ecx, %3 338 <1> %if %0 = 4 338 <1> mov edx, %4 338 <1> %endif 338 <1> %endif 338 <1> %endif 338 00000224 B801000000 <1> mov eax, %1 338 <1> 338 00000229 CD40 <1> int 40h 339 halt: 340 0000022B EBFE jmp short halt 341 342 next_line: 343 ; next line 344 0000022D BE[AD040000] mov esi, nextline 345 print_msg: 346 00000232 B40E mov ah, 0Eh 347 00000234 BB07000000 mov ebx, 7 348 ;mov bl, 7 ; char attribute & color 349 p_next_chr: 350 00000239 AC lodsb 351 0000023A 08C0 or al, al 352 0000023C 7404 jz short p_retn ; retn 353 0000023E CD31 int 31h 354 00000240 EBF7 jmp short p_next_chr 355 p_retn: 356 00000242 C3 retn 357 358 colorbox: 359 ; BL = color 360 ; CL = box size in pixels 361 362 ; Modified regs: eax, ecx, edi 363 364 00000243 0FB6C1 movzx eax, cl 365 00000246 F6E1 mul cl 366 00000248 89C1 mov ecx, eax 367 0000024A BF[6C050000] mov edi, boxbuff 368 0000024F 88D8 mov al, bl 369 00000251 F3AA rep stosb 370 00000253 C3 retn 371 372 drawbox: 373 ; INPUT: 374 ; [LFB_addr] 375 ; [x_pos] 376 ; [y_pos] 377 ; [boxsize] 378 ; [color] 379 ; 380 ; Modified registers: edi, eax, ecx, ebx, edx 381 382 ; 26/01/2021 383 00000254 E868000000 call drawbox_p 384 385 ;mov edi, [LFB_addr] 386 ;mov eax, 640 387 ;mul dword [y_pos] 388 ;add eax, [x_pos] 389 ;mov ebx, [boxsize] 390 ;add edi, eax 391 ;;mov ecx, ebx ; height = width 392 393 ; 26/01/2021 394 ;mov edx, ebx 395 396 00000259 A0[65050000] mov al, [color] 397 0000025E 803D[66050000]00 cmp byte [ctype], 0 ; box/fill (1=line/frame) 398 00000265 7726 ja short _dlines 399 _dbox: 400 ;push ecx 401 00000267 57 push edi 402 00000268 89D9 mov ecx, ebx ; width 403 ;mov al, [color] 404 0000026A F3AA rep stosb 405 0000026C 5F pop edi 406 0000026D 81C780020000 add edi, 640 407 ;pop ecx 408 ;loop _dbox 409 00000273 4A dec edx 410 00000274 75F1 jnz short _dbox 411 00000276 C605[67050000]00 mov byte [ptype], 0 ; box 412 0000027D C3 retn 413 414 drawbox_x: 415 ; clear previous box (at previous position) 416 417 ; 26/01/2021 418 0000027E E83E000000 call drawbox_p 419 420 ; Black color 421 00000283 28C0 sub al, al 422 ;mov byte [color], 0 ; al = 0 423 424 00000285 3805[67050000] cmp byte [ptype], al ; 0 425 0000028B 76DA jna short _dbox ; draw color filled box 426 427 ; draw square frame 428 _dlines: 429 ; draw (x1,y1) to (x2,y1) horizontal line at first 430 0000028D 89D9 mov ecx, ebx ; length 431 0000028F 49 dec ecx 432 00000290 F3AA rep stosb 433 ; draw (x2,y1) to (x2,y2) vertical line 434 00000292 89D9 mov ecx, ebx ; height 435 _dvline1: 436 00000294 8807 mov [edi], al 437 00000296 81C780020000 add edi, 640 438 0000029C E2F6 loop _dvline1 439 ; draw (x2,y2) to (x3,y2) horizontal line 440 0000029E 81EF7F020000 sub edi, 639 441 000002A4 29DF sub edi, ebx ; width 442 000002A6 89D9 mov ecx, ebx 443 000002A8 F3AA rep stosb 444 ; draw (x3,y2) to (x1,y1) vertical line 445 000002AA 29DF sub edi, ebx 446 _dvline2: 447 000002AC 8807 mov [edi], al 448 000002AE 4A dec edx 449 000002AF 7408 jz short _dvline3 450 000002B1 81EF80020000 sub edi, 640 451 000002B7 EBF3 jmp short _dvline2 452 _dvline3: 453 000002B9 C605[67050000]01 mov byte [ptype], 1 ; frame 454 000002C0 C3 retn 455 456 drawbox_p: 457 ; prepare box start address and h/v size 458 459 000002C1 8B3D[54050000] mov edi, [LFB_addr] 460 000002C7 B880020000 mov eax, 640 461 000002CC F725[58050000] mul dword [y_pos] 462 000002D2 0305[5C050000] add eax, [x_pos] 463 000002D8 8B1D[60050000] mov ebx, [boxsize] 464 000002DE 01C7 add edi, eax 465 ;mov ecx, ebx ; height = width 466 467 ; 26/01/2021 468 000002E0 89DA mov edx, ebx 469 000002E2 C3 retn 470 471 movecenter: 472 ; Modified registers: ecx 473 474 000002E3 B980020000 mov ecx, 640 475 000002E8 662B0D[60050000] sub cx, [boxsize] 476 000002EF 66D1E9 shr cx, 1 477 000002F2 66890D[5C050000] mov [x_pos], cx 478 000002F9 66B9E001 mov cx, 480 479 000002FD 662B0D[60050000] sub cx, [boxsize] 480 00000304 66D1E9 shr cx, 1 481 00000307 66890D[58050000] mov [y_pos], cx 482 0000030E C3 retn 483 484 wordtohex: 485 ; INPUT -> 486 ; ax = word (binary number) 487 ; OUTPUT -> 488 ; eax = hexadecimal string 489 ; 490 0000030F 53 push ebx 491 00000310 31DB xor ebx, ebx 492 00000312 86E0 xchg ah, al 493 00000314 6650 push ax 494 00000316 88E3 mov bl, ah 495 00000318 C0EB04 shr bl, 4 496 0000031B 8A83[44050000] mov al, [ebx+hexchrs] 497 00000321 88E3 mov bl, ah 498 00000323 80E30F and bl, 0Fh 499 00000326 8AA3[44050000] mov ah, [ebx+hexchrs] 500 0000032C C1E010 shl eax, 16 501 0000032F 6658 pop ax 502 00000331 88C3 mov bl, al 503 00000333 C0EB04 shr bl, 4 504 00000336 8A9B[44050000] mov bl, [ebx+hexchrs] 505 0000033C 86D8 xchg bl, al 506 0000033E 80E30F and bl, 0Fh 507 00000341 8AA3[44050000] mov ah, [ebx+hexchrs] 508 00000347 5B pop ebx 509 00000348 C3 retn 510 511 set_text_mode: 512 00000349 30E4 xor ah, ah 513 0000034B B003 mov al, 3 514 ;int 10h ; al = 03h text mode, int 10 video 515 0000034D CD31 int 31h ; TRDOS 386 - Video interrupt 516 0000034F C3 retn 517 518 program_msg: 519 00000350 5452444F5320333836- db "TRDOS 386 v2.0.3 - Linear Frame Buffer ('sysvideo') Test Program" 519 00000359 2076322E302E33202D- 519 00000362 204C696E6561722046- 519 0000036B 72616D652042756666- 519 00000374 657220282773797376- 519 0000037D 6964656F2729205465- 519 00000386 73742050726F677261- 519 0000038F 6D 520 00000390 0D0A db 0Dh, 0Ah 521 00000392 6279204572646F6761- db "by Erdogan Tan - 26/01/2021" 521 0000039B 6E2054616E202D2032- 521 000003A4 362F30312F32303231 522 ;db 0Dh, 0Ah, 0 523 000003AD 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 524 525 000003B1 557365204172726F77- db "Use Arrow Keys, Home, End to move the BOX .." 525 000003BA 204B6579732C20486F- 525 000003C3 6D652C20456E642074- 525 000003CC 6F206D6F7665207468- 525 000003D5 6520424F58202E2E 526 000003DD 0D0A db 0Dh, 0Ah 527 000003DF 557365202B2C2D206B- db "Use +,- keys to increase and decrease BOX size .." 527 000003E8 65797320746F20696E- 527 000003F1 63726561736520616E- 527 000003FA 642064656372656173- 527 00000403 6520424F582073697A- 527 0000040C 65202E2E 528 00000410 0D0A db 0Dh, 0Ah 529 00000412 557365205350414345- db "Use SPACE, ENTER, Pg Up, Pg Down keys to change box color .." 529 0000041B 2C20454E5445522C20- 529 00000424 50672055702C205067- 529 0000042D 20446F776E206B6579- 529 00000436 7320746F206368616E- 529 0000043F 676520626F7820636F- 529 00000448 6C6F72202E2E 530 0000044E 0D0A db 0Dh, 0Ah 531 00000450 55736520496E736572- db "Use Insert, Delete keys to change square (frame/box) shape .." 531 00000459 742C2044656C657465- 531 00000462 206B65797320746F20- 531 0000046B 6368616E6765207371- 531 00000474 756172652028667261- 531 0000047D 6D652F626F78292073- 531 00000486 68617065202E2E 532 0000048D 0D0A db 0Dh, 0Ah 533 0000048F 0D0A db 0Dh, 0Ah 534 00000491 507265737320616E79- db "Press any key to continue .." 534 0000049A 206B657920746F2063- 534 000004A3 6F6E74696E7565202E- 534 000004AC 2E 535 nextline: 536 000004AD 0D0A00 db 0Dh, 0Ah, 0 537 538 msg_vbe_error: 539 000004B0 0D0A db 0Dh, 0Ah 540 000004B2 766573612076626520- db 'vesa vbe video mode error !' 540 000004BB 766964656F206D6F64- 540 000004C4 65206572726F722021 541 000004CD 0D0A00 db 0Dh, 0Ah, 0 542 msg_lfb_error: 543 000004D0 0D0A db 0Dh, 0Ah 544 000004D2 6C696E656172206672- db 'linear frame buffer error !' 544 000004DB 616D65206275666665- 544 000004E4 72206572726F722021 545 000004ED 0D0A00 db 0Dh, 0Ah, 0 546 547 msg_lfb_ok: 548 000004F0 0D0A db 0Dh, 0Ah 549 000004F2 6C696E656172206672- db 'linear frame buffer ready .. (at address ' 549 000004FB 616D65206275666665- 549 00000504 72207265616479202E- 549 0000050D 2E2028617420616464- 549 00000516 7265737320 550 lfb_addr_str: ; 8 (hex) digits 551 0000051B 303030303030303068- db '00000000h)' 551 00000524 29 552 00000525 0D0A db 0Dh, 0Ah 553 00000527 70726573732061206B- db 'press a key to continue ..' 553 00000530 657920746F20636F6E- 553 00000539 74696E7565202E2E 554 00000541 0D0A00 db 0Dh, 0Ah, 0 555 556 hexchrs: 557 00000544 303132333435363738- db '0123456789ABCDEF' 557 0000054D 39414243444546 558 bss: 559 560 ABSOLUTE bss 561 562 alignb 4 563 564 bss_start: 565 566 LFB_addr: 567 00000554 resd 1 568 569 00000558 y_pos: resd 1 570 571 0000055C x_pos: resd 1 572 573 boxsize: 574 00000560 resd 1 575 boxcolor: 576 00000564 resb 1 577 00000565 color: resb 1 578 00000566 ctype: resb 1 ; 0 = box, 1 = frame (square lines) 579 00000567 ptype: resb 1 ; previous type 580 581 counter: 582 00000568 resd 1 583 584 boxbuff: 585 0000056C resb 128*128 586 587 bss_end: