
      ;
      ; 256 BYTES OF DBFINTERACTIVE INVITRO
      ;

       ORG 100h

      ;RANDOM = 00049h
      ;KEYBRD = 00060h
      ;PALLET = 003C9h
      ;VTRACE = 003DAh
      ;VIDMEM = 0A000h

;       MACRO  MOD [IMM8]
;       {
;        DB 0xD4,IMM8
;       }
       MOD    MACRO IMM8
              DB 0xD4,IMM8
       MOD    ENDM
                        ;----------;
 INIT: MOV    AX,0x13   ; B4 13 00 ;
       INT    0x10      ; CD 10    ;
                        ;----------;
       LEA    SI,TEXT   ; BE 9B 01 ;
 ECHO: LODSW            ; AD       ;
       XCHG   AX,DX     ; 92       ;
       MOV    AH,0x02   ; B4 02    ;
       INT    0x10      ; CD 10    ;
 PRNT: LODSB            ; AC       ;
       MOV    DL,AL     ; 8A D0    ;
       INT    0x21      ; CD 21    ;
       OR     DL,DL     ; 0A D2    ;
       JNZ    PRNT      ; 75 F5    ;
       OR     DH,DH     ; 0A F6    ;
       JNZ    ECHO      ; 75 EB    ;
                        ;----------;
       MOV    DX,0x03C9 ; BA C7 03 ;
 COLR: OUT    DX,AL     ; EE       ;
       NOT    AL        ; F6 D0    ;
       ROL    AX,0x01   ; D1 C0    ;
       OUT    DX,AL     ; EE       ;
       ROR    AX,0x01   ; D1 C8    ;
       OUT    DX,AL     ; EE       ;
       NOT    AL        ; F6 D0    ;
       INC    AX        ; 48       ;
       JNZ    COLR      ; 75 F2    ;
                        ;----------;
       PUSH   0xA000    ; 68 00 A0 ;
       POP    ES        ; 07       ;
       PUSH   ES        ; 06       ;
       POP    DS        ; 1F       ;
                        ;----------;
       XOR    DI,DI     ; 33 FF    ;
       MOV    BL,0xCC   ; B3 CD    ;
 LINE: MOV    CX,0x0140 ; B9 40 01 ;
 FILL: MOV    AL,[DI]   ; 8A 05    ;
       OR     AL,AL     ; 0A C0    ;
       MOV    AL,CL     ; 8A C1    ;
       JNZ    SKIP      ; 75 08    ;
       OR     AL,BL     ; 0A C3    ;
       MOD    0x10      ; D4 10    ;
       OR     AL,AH     ; 0A C4    ;
       AND    AL,0x3F   ; 24 3F    ;
       JMP    STOR      ; EB 02    ;
 SKIP: SBB    AL,BL     ; 1A C3    ;
       SBB    AL,CL     ; 1A C1    ;
 STOR: STOSB            ; AA       ;
       LOOP   FILL      ; E2 EB    ;
       DEC    BX        ; 4B       ;
       JNZ    LINE      ; 75 E5    ;
                        ;----------;
       MOV    DL,0x31   ; B2 31    ;
       MOV    AL,0x3F   ; B0 3F    ;
       OUT    DX,AL     ; EE       ;
                        ;----------;
 MAIN: XOR    SI,SI     ; 33 F6    ;
       MOV    DI,0xFA00 ; BF 00 FA ;
       MOV    CX,0x0140 ; B9 40 01 ;
       PUSH   DI        ; 57       ;
       PUSH   SI        ; 56       ;
       PUSH   CX        ; 51       ;
 PLOT: LODSB            ; AC       ;
       STOSB            ; AA       ;
       LOOP   PLOT      ; E2 FC    ;
       POP    SI        ; 5E       ;
       POP    DI        ; 5F       ;
       POP    CX        ; 59       ;
                        ;----------;
       PUSH OFFSET DRAW ; 68 77 01 ;
 VBLK: MOV    DL,0xDA   ; B2 DA    ;
 SYNC: IN     AX,DX     ; ED       ;
       TEST   AL,0x08   ; A8 08    ;
       JZ     SYNC      ; 74 FB    ;
       RET              ; C3       ;
                        ;----------;
 DRAW: LODSB            ; AC       ;
       DEC    AX        ; 48       ;
       STOSB            ; AA       ;
       LOOP   DRAW      ; E2 FA    ;
                        ;----------;
       MOV    DL,0x30   ; B2 30    ;
 TUNE: DEC    BX        ; 4B       ;
       LODSW            ; AD       ;
       SBB    AX,[DI]   ; 1B 05    ;
       XOR    AL,BH     ; 32 C7    ;
       XOR    AH,BL     ; 32 E3    ;
       AND    AX,0x3F3F ; 25 3F 3F ;
       OR     AL,AH     ; 0A C4    ;
       XCHG   AX,BP     ; 95       ;
 PLAY: MOV    AL,0x99   ; B0 99    ;
       OUT    DX,AL     ; EE       ;
       MOV    AX,BP     ; 8B C5    ;
       OUT    DX,AL     ; EE       ;
       MOV    AL,AH     ; 8A C4    ;
       OUT    DX,AL     ; EE       ;
                        ;----------;
 EXIT: MOV    AH,0x01   ; B4 01    ;
       INT    0x16      ; CD 10    ;
       JZ     MAIN      ; 74 E9    ;
                        ;----------;
       MOV    BX,0x0031 ; BB 63 00 ;
 DONE: MOV    CH,0x01   ; B1 FF    ;
       CALL   VBLK      ; E8 17 00 ;
       MOV    DL,0xC7   ; B2 C7    ;
       IN     AL,DX     ; ED       ;
       INC    DX        ; 42       ;
       OUT    DX,AL     ; EE       ;
       INC    DX        ; 42       ;
                        ;----------;
 BLAK: CALL   FADE      ; E8 13 00 ;
       CALL   FADE      ; E8 10 00 ;
       CALL   FADE      ; E8 0D 00 ;
       LOOP   BLAK      ; 75 F6    ;
       DEC    BX        ; 4B       ;
       JNZ    DONE      ; 75 E6    ;
                        ;----------;
 FADE: IN     AL,DX     ; EC       ;
       MOV    AL,BL     ; 8A C3    ;
       OUT    DX,AL     ; EE       ;
       RET              ; C3       ;
                        ;----------;
 TEXT  DB 0x07,0x10,'http://dbfinteractive.com/',0
       DB 0x0F,0x08,'visit us at',0
       DB 0x09,0x00,'for good coding advice',0
