1 ; BAR3.ASM (10/04/1993, BAR3.COM) 2 ; ---------------------------------------------------------- 3 ; Copper bars by Patch (hamell@rigel.cs.pdx.edu) 4 ; Uses "color each line differently and cycle colors" method 5 ; 4-9-93 6 ; Call Dead Man's Hand at 503.288.9264 - USR 16.8k DS 7 ; Programming source only 8 9 ; ------------------------------------------------- 10 ; TRDOS 386 & NASM version: Erdogan Tan, 30/08/2016 11 ; ------------------------------------------------- 12 13 ; 19/05/2016 14 ; 29/04/2016 15 ; TRDOS 386 system calls (temporary list!) 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 _creat equ 8 25 _link equ 9 26 _unlink equ 10 27 _exec equ 11 28 _chdir equ 12 29 _time equ 13 30 _mkdir equ 14 31 _chmod equ 15 32 _chown equ 16 33 _break equ 17 34 _stat equ 18 35 _seek equ 19 36 _tell equ 20 37 _mount equ 21 38 _umount equ 22 39 _setuid equ 23 40 _getuid equ 24 41 _stime equ 25 42 _quit equ 26 43 _intr equ 27 44 _fstat equ 28 45 _emt equ 29 46 _mdate 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 _rsrvd1 equ 37 54 _pri equ 38 55 _rele equ 39 56 57 %macro sys 1-4 58 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 59 ; 03/09/2015 60 ; 13/04/2015 61 ; Retro UNIX 386 v1 system call. 62 %if %0 >= 2 63 mov ebx, %2 64 %if %0 >= 3 65 mov ecx, %3 66 %if %0 = 4 67 mov edx, %4 68 %endif 69 %endif 70 %endif 71 mov eax, %1 72 ;int 30h 73 int 40h ; TRDOS 386 (TRDOS v2.0) 74 %endmacro 75 76 ; TRDOS 386 (and Retro UNIX 386 v1) system call format: 77 ; sys systemcall (eax) , , 78 79 [BITS 32] ; 80386 Protected Mode (32 bit) intructions 80 81 [ORG 0] 82 83 start: 84 ; DIRECT VGA MEMORY ACCESS 85 ;xor ebx, ebx 86 00000000 B705 mov bh, 5 ; Direct access/map to VGA memory (0A0000h) 87 ;mov eax, _video ; 1Fh 88 00000002 B01F mov al, 1Fh ; sys _video ; TRDOS 386 Video functions 89 00000004 CD40 int 40h ; TRDOS 386 system call 90 91 ; eax = 0A0000h 92 00000006 21C0 and eax, eax 93 00000008 0F841B010000 jz terminate ; error (eax = 0) 94 95 0000000E 66B81300 mov ax, 13h 96 ;int 10h ; - VIDEO - SET VIDEO MODE 97 ; AL = mode 98 00000012 CD31 int 31h ; TRDOS 386 Video interrupt 99 100 00000014 66BAC803 mov dx, 03C8h 101 00000018 30C0 xor al, al 102 ;out dx, al 103 104 0000001A B401 mov ah, 1 ; out (byte) 105 0000001C CD34 int 34h ; TRDOS 386 - IOCTL interrupt 106 107 0000001E 6642 inc dx 108 00000020 66B90001 mov cx, 256 109 spoo: 110 ;out dx, al 111 ;out dx, al 112 ;out dx, al 113 114 ;mov ah, 1 ; out (byte) 115 00000024 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 116 00000026 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 117 00000028 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 118 119 0000002A E2F8 loop spoo 120 121 0000002C B3C8 mov bl, 200 122 0000002E 66B80101 mov ax, 0101h 123 00000032 BF00000A00 mov edi, 0A0000h 124 00000037 FC cld 125 spank: 126 00000038 66B9A000 mov cx, 160 127 0000003C F366AB rep stosw 128 0000003F FEC0 inc al 129 00000041 FEC4 inc ah 130 00000043 FECB dec bl 131 00000045 75F1 jnz short spank 132 133 00000047 31FF xor edi, edi 134 00000049 66BB[3204] mov bx, barline 135 startbar: ; don't poll keyboard 136 0000004D 66BE[9A02] mov si, palette ; set up pointer 137 00000051 66BD0100 mov bp, 1 ; bar num = 1 138 palsetup: 139 00000055 55 push ebp 140 00000056 668B3B mov di, [ebx] 141 00000059 8A87[32010000] mov al, [edi+sintable] ; top bar line 142 143 0000005F 66BF[1005] mov di, barpal 144 00000063 FEC8 dec al ; dec for 0th index element 145 00000065 30E4 xor ah, ah ; clear high byte 146 00000067 6689C1 mov cx, ax 147 0000006A 66D1E0 shl ax, 1 148 0000006D 6601C8 add ax, cx 149 00000070 6601C7 add di, ax ; set to proper spot in bar palette 150 00000073 66BD[4204] mov bp, barpriority ; 151 00000077 6601CD add bp, cx ; set to proper spot in priority check 152 0000007A 668B0D[0A050000] mov cx, [barheight] 153 checkline: 154 00000081 807D0000 cmp byte [ebp], 0 ; is the line empty? 155 00000085 7509 jne short nodrawline ; if not, jump 156 00000087 C6450001 mov byte [ebp], 1 ; it's full now 157 0000008B 66A5 movsw 158 0000008D A4 movsb 159 0000008E EB08 jmp short nextpriority 160 161 nodrawline: 162 00000090 6683C603 add si, 3 ; increment palette pointer 163 00000094 6683C703 add di, 3 ; increment bar palette 164 nextpriority: 165 00000098 6645 inc bp ; next priority line 166 0000009A E2E5 loop checkline 167 168 barspot: 169 0000009C 66830303 add word [ebx], 3 ; increment table index 170 000000A0 66813B6701 cmp word [ebx], 359 ; end of table? 171 000000A5 7E05 jle short nextbar 172 resetbarspot: 173 000000A7 66C7030000 mov word [ebx], 0 ; reset table index 174 175 nextbar: 176 000000AC 5D pop ebp 177 000000AD 6643 inc bx ; next bar line address 178 000000AF 6643 inc bx ; word size = + 2 179 000000B1 6645 inc bp ; increment bar counter 180 181 000000B3 663B2D[0C050000] cmp bp, [barcount] ; bar count at max? 182 000000BA 7E99 jle short palsetup ; if <= , go back 183 184 000000BC 66BE[1005] mov si, barpal 185 000000C0 66B9C800 mov cx, 200 186 187 000000C4 66BADA03 mov dx, 03DAh ; Input Status 1 reg 188 VRetrace: 189 ;in al, dx 190 191 000000C8 B400 mov ah, 0 ; in (byte) 192 000000CA CD34 int 34h ; TRDOS 386 - IOCTL interrupt 193 194 000000CC A808 test al,00001000b ; test bit 3, vert retrace 195 000000CE 75F8 jnz short VRetrace ; if active, go back 196 VNoRetrace: 197 ;in al, dx 198 199 000000D0 B400 mov ah, 0 ; in (byte) 200 000000D2 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 201 202 000000D4 A808 test al,00001000b ; test bit 3, vert retrace 203 000000D6 74F8 jz short VNoRetrace ; if active, go back 204 205 000000D8 B001 mov al, 01h ; start at color 1 206 000000DA 66BAC803 mov dx, 03C8h 207 ;out dx, al 208 209 000000DE B401 mov ah, 1 ; out (byte) 210 000000E0 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 211 212 000000E2 6642 inc dx 213 paldump: 214 ;outsb ; dump it out 215 ;outsb 216 ;outsb 217 218 000000E4 AC lodsb 219 ;mov ah, 1 ; out (byte) 220 000000E5 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 221 000000E7 AC lodsb 222 000000E8 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 223 000000EA AC lodsb 224 000000EB CD34 int 34h ; TRDOS 386 - IOCTL interrupt 225 226 000000ED E2F5 loop paldump 227 228 000000EF 66BF[4204] mov di, barpriority 229 000000F3 66B96400 mov cx, 100 ; 100 of them WORD sized 230 000000F7 6631C0 xor ax, ax ; AH = 0, AL = 0 231 000000FA F366AB rep stosw ; zero them all out 232 233 000000FD 66BF[1005] mov di, barpal 234 00000101 66B92C01 mov cx, 300 235 00000105 6631C0 xor ax, ax 236 00000108 F366AB rep stosw 237 238 0000010B 662B1D[0C050000] sub bx, [barcount] ; reset bar line address 239 00000112 662B1D[0C050000] sub bx, [barcount] ; twice for word size 240 241 00000119 B401 mov ah, 01h ; Check keyboard buffer 242 ;int 16h 243 0000011B CD32 int 32h ; TRDOS 386 keyboard interrupt 244 0000011D 0F842AFFFFFF jz startbar ; Empty 245 246 00000123 66B80300 mov ax, 3 247 ;int 10h ; - VIDEO - SET VIDEO MODE 248 ; AL = mode 249 00000127 CD31 int 31h ; TRDOS 386 Video interrupt 250 terminate: 251 sys _exit ; INT 40h 252 <1> 253 <1> 254 <1> 255 <1> 256 <1> %if %0 >= 2 257 <1> mov ebx, %2 258 <1> %if %0 >= 3 259 <1> mov ecx, %3 260 <1> %if %0 = 4 261 <1> mov edx, %4 262 <1> %endif 263 <1> %endif 264 <1> %endif 265 00000129 B801000000 <1> mov eax, %1 266 <1> 267 0000012E CD40 <1> int 40h 268 here: 269 00000130 EBFE jmp short here 270 271 00000132 010101010101010101- sintable db 1,1,1,1,1,1,1,1,1,2,2,2 272 0000013B 020202 273 0000013E 030303040405050606- db 3,3,3,4,4,5,5,6,6,7,7,8 274 00000147 070708 275 0000014A 08090A0B0B0C0D0E0E- db 8,9,10,11,11,12,13,14,14,15,16,17 276 00000153 0F1011 277 00000156 12131415161718191A- db 18,19,20,21,22,23,24,25,26,27,29,30 278 0000015F 1B1D1E 279 00000162 1F2021232425262829- db 31,32,33,35,36,37,38,40,41,42,44,45 280 0000016B 2A2C2D 281 0000016E 2E303133343637393A- db 46,48,49,51,52,54,55,57,58,60,61,63 282 00000177 3C3D3F 283 0000017A 404243454648494B4D- db 64,66,67,69,70,72,73,75,77,78,80,81 284 00000183 4E5051 285 00000186 53545658595B5D5E60- db 83,84,86,88,89,91,93,94,96,97,99,101 286 0000018F 616365 287 00000192 6668696B6C6E707173- db 102,104,105,107,108,110,112,113,115,116,118,119 288 0000019B 747677 289 0000019E 797A7C7D7F80828385- db 121,122,124,125,127,128,130,131,133,134,136,137 290 000001A7 868889 291 000001AA 8A8C8D8F9091939495- db 138,140,141,143,144,145,147,148,149,150,152,153 292 000001B3 969899 293 000001B6 9A9B9C9E9FA0A1A2A3- db 154,155,156,158,159,160,161,162,163,164,165,166 294 000001BF A4A5A6 295 000001C2 A7A8A9AAABABACADAE- db 167,168,169,170,171,171,172,173,174,174,175,176 296 000001CB AEAFB0 297 000001CE B1B1B2B2B3B3B4B4B5- db 177,177,178,178,179,179,180,180,181,181,182,182 298 000001D7 B5B6B6 299 000001DA B6B7B7B7B8B8B8B8B8- db 182,183,183,183,184,184,184,184,184,184,184,184 ; top to bottom palette values 300 000001E3 B8B8B8 301 000001E6 B8B8B8B8B8B8B8B8B8- db 184,184,184,184,184,184,184,184,184,183,183,183 302 000001EF B7B7B7 303 000001F2 B6B6B6B5B5B4B4B3B3- db 182,182,182,181,181,180,180,179,179,178,178,177 304 000001FB B2B2B1 305 000001FE B1B0AFAEAEADACABAB- db 177,176,175,174,174,173,172,171,171,170,169,168 306 00000207 AAA9A8 307 0000020A A7A6A5A4A3A2A1A09F- db 167,166,165,164,163,162,161,160,159,158,156,155 308 00000213 9E9C9B 309 00000216 9A9998969594939190- db 154,153,152,150,149,148,147,145,144,143,141,140 310 0000021F 8F8D8C 311 00000222 8B898886858382807F- db 139,137,136,134,133,131,130,128,127,125,124,122 312 0000022B 7D7C7A 313 0000022E 797776747371706E6C- db 121,119,118,116,115,113,112,110,108,107,105,104 314 00000237 6B6968 315 0000023A 66656361605E5D5B59- db 102,101,99,97,96,94,93,91,89,88,86,84 316 00000243 585654 317 00000246 5351504E4D4B494846- db 83,81,80,78,77,75,73,72,70,69,67,66 318 0000024F 454342 319 00000252 403F3D3C3A39373634- db 64,63,61,60,58,57,55,54,52,51,49,48 320 0000025B 333130 321 0000025E 2F2D2C2A2928262524- db 47,45,44,42,41,40,38,37,36,35,33,32 322 00000267 232120 323 0000026A 1F1E1D1B1A19181716- db 31,30,29,27,26,25,24,23,22,21,20,19 324 00000273 151413 325 00000276 1211100F0E0E0D0C0B- db 18,17,16,15,14,14,13,12,11,11,10,9 326 0000027F 0B0A09 327 00000282 080807070606050504- db 8,8,7,7,6,6,5,5,4,4,3,3 328 0000028B 040303 329 0000028E 030202020101010101- db 3,2,2,2,1,1,1,1,1,1,1,1 ; bottom to top palette values 330 00000297 010101 331 332 0000029A 070707 palette db 7, 7, 7 ; gray bar start 333 0000029D 0A0A0A db 10,10,10 334 000002A0 0D0D0D db 13,13,13 335 000002A3 101010 db 16,16,16 336 000002A6 131313 db 19,19,19 337 000002A9 161616 db 22,22,22 338 000002AC 191919 db 25,25,25 339 000002AF 1C1C1C db 28,28,28 340 000002B2 1F1F1F db 31,31,31 ; middle 341 000002B5 1C1C1C db 28,28,28 342 000002B8 191919 db 25,25,25 343 000002BB 161616 db 22,22,22 344 000002BE 131313 db 19,19,19 345 000002C1 101010 db 16,16,16 346 000002C4 0D0D0D db 13,13,13 347 000002C7 0A0A0A db 10,10,10 348 000002CA 070707 db 7, 7, 7 ; gray bar end 349 000002CD 070000 db 7, 0, 0 ; red bar start 350 000002D0 0A0000 db 10, 0, 0 351 000002D3 0D0000 db 13, 0, 0 352 000002D6 100000 db 16, 0, 0 353 000002D9 130000 db 19, 0, 0 354 000002DC 160000 db 22, 0, 0 355 000002DF 190000 db 25, 0, 0 356 000002E2 1C0000 db 28, 0, 0 357 000002E5 1F0000 db 31, 0, 0 ; middle 358 000002E8 1C0000 db 28, 0, 0 359 000002EB 190000 db 25, 0, 0 360 000002EE 160000 db 22, 0, 0 361 000002F1 130000 db 19, 0, 0 362 000002F4 100000 db 16, 0, 0 363 000002F7 0D0000 db 13, 0, 0 364 000002FA 0A0000 db 10, 0, 0 365 000002FD 070000 db 7, 0, 0 ; red bar end 366 00000300 000700 db 0, 7, 0 ; green bar start 367 00000303 000A00 db 0,10, 0 368 00000306 000D00 db 0,13, 0 369 00000309 001000 db 0,16, 0 370 0000030C 001300 db 0,19, 0 371 0000030F 001600 db 0,22, 0 372 00000312 001900 db 0,25, 0 373 00000315 001C00 db 0,28, 0 374 00000318 001F00 db 0,31, 0 ; middle 375 0000031B 001C00 db 0,28, 0 376 0000031E 001900 db 0,25, 0 377 00000321 001600 db 0,22, 0 378 00000324 001300 db 0,19, 0 379 00000327 001000 db 0,16, 0 380 0000032A 000D00 db 0,13, 0 381 0000032D 000A00 db 0,10, 0 382 00000330 000700 db 0, 7, 0 ; green bar end 383 00000333 000007 db 0, 0, 7 ; blue bar start 384 00000336 00000A db 0, 0,10 385 00000339 00000D db 0, 0,13 386 0000033C 000010 db 0, 0,16 387 0000033F 000013 db 0, 0,19 388 00000342 000016 db 0, 0,22 389 00000345 000019 db 0, 0,25 390 00000348 00001C db 0, 0,28 391 0000034B 00001F db 0, 0,31 ; middle 392 0000034E 00001C db 0, 0,28 393 00000351 000019 db 0, 0,25 394 00000354 000016 db 0, 0,22 395 00000357 000013 db 0, 0,19 396 0000035A 000010 db 0, 0,16 397 0000035D 00000D db 0, 0,13 398 00000360 00000A db 0, 0,10 399 00000363 000007 db 0, 0, 7 ; blue bar end 400 00000366 070700 db 7, 7, 0 ; yellow bar start 401 00000369 0A0A00 db 10,10, 0 402 0000036C 0D0D00 db 13,13, 0 403 0000036F 101000 db 16,16, 0 404 00000372 131300 db 19,19, 0 405 00000375 161600 db 22,22, 0 406 00000378 191900 db 25,25, 0 407 0000037B 1C1C00 db 28,28, 0 408 0000037E 1F1F00 db 31,31, 0 ; middle 409 00000381 1C1C00 db 28,28, 0 410 00000384 191900 db 25,25, 0 411 00000387 161600 db 22,22, 0 412 0000038A 131300 db 19,19, 0 413 0000038D 101000 db 16,16, 0 414 00000390 0D0D00 db 13,13, 0 415 00000393 0A0A00 db 10,10, 0 416 00000396 070700 db 7, 7, 0 ; yellow bar end 417 00000399 070007 db 7, 0, 7 ; purple bar start 418 0000039C 0A000A db 10, 0,10 419 0000039F 0D000D db 13, 0,13 420 000003A2 100010 db 16, 0,16 421 000003A5 130013 db 19, 0,19 422 000003A8 160016 db 22, 0,22 423 000003AB 190019 db 25, 0,25 424 000003AE 1C001C db 28, 0,28 425 000003B1 1F001F db 31, 0,31 ; middle 426 000003B4 1C001C db 28, 0,28 427 000003B7 190019 db 25, 0,25 428 000003BA 160016 db 22, 0,22 429 000003BD 130013 db 19, 0,19 430 000003C0 100010 db 16, 0,16 431 000003C3 0D000D db 13, 0,13 432 000003C6 0A000A db 10, 0,10 433 000003C9 070007 db 7, 0, 7 ; purple bar end 434 000003CC 000707 db 0, 7, 7 ; cyan bar start 435 000003CF 000A0A db 0,10,10 436 000003D2 000D0D db 0,13,13 437 000003D5 001010 db 0,16,16 438 000003D8 001313 db 0,19,19 439 000003DB 001616 db 0,22,22 440 000003DE 001919 db 0,25,25 441 000003E1 001C1C db 0,28,28 442 000003E4 001F1F db 0,31,31 ; middle 443 000003E7 001C1C db 0,28,28 444 000003EA 001919 db 0,25,25 445 000003ED 001616 db 0,22,22 446 000003F0 001313 db 0,19,19 447 000003F3 001010 db 0,16,16 448 000003F6 000D0D db 0,13,13 449 000003F9 000A0A db 0,10,10 450 000003FC 000707 db 0, 7, 7 ; cyan bar end 451 000003FF 120801 db 18, 8, 1 ; copper bar start 452 00000402 170D05 db 23,13, 5 453 00000405 1C1209 db 28,18, 9 454 00000408 21170D db 33,23,13 455 0000040B 261C11 db 38,28,17 456 0000040E 2B2115 db 43,33,21 457 00000411 302619 db 48,38,25 458 00000414 352B1D db 53,43,29 459 00000417 3A3021 db 58,48,33 ; middle 460 0000041A 352B1D db 53,43,29 461 0000041D 302619 db 48,38,25 462 00000420 2B2115 db 43,33,21 463 00000423 261C11 db 38,28,17 464 00000426 21170D db 33,23,13 465 00000429 1C1209 db 28,18, 9 466 0000042C 170D05 db 23,13, 5 467 0000042F 120801 db 18, 8, 1 ; copper bar end 468 469 00000432 AF0096007D0064004B- barline dw 175, 150, 125, 100, 75, 50, 25, 0 470 0000043B 00320019000000 471 00000442 00 barpriority times 200 db 0 472 0000050A 1100 barheight dw 17 473 0000050C 0800 barcount dw 8 474 0000050E 0A00 bardelay dw 10 475 00000510 00 barpal times 200*3 db 0 476 477 _end: