[Back to ANSI SWAG index] [Back to Main SWAG index] [Original]
{Reading in a thedraw image :)
}
Procedure UNCRUNCH (Var Addr1,Addr2; BlkLen:Integer);
begin
Inline (
$1E/ { PUSH DS ;Save data segment.}
$C5/$B6/ADDR1/ { LDS SI,[BP+Addr1] ;Source Address}
$C4/$BE/ADDR2/ { LES DI,[BP+Addr2] ;Destination Addr}
$8B/$8E/BLKLEN/ { MOV CX,[BP+BlkLen] ;Length of block}
$E3/$5B/ { JCXZ Done}
$8B/$D7/ { MOV DX,DI ;Save X coordinate For
later.}
$33/$C0/ { xor AX,AX ;Set Current attributes.}
$FC/ { CLD}
$AC/ {LOOPA: LODSB ;Get next Character.}
$3C/$20/ { CMP AL,32 ;if a control Character,
jump.}
$72/$05/ { JC ForeGround}
$AB/ { StoSW ;Save letter on screen.}
$E2/$F8/ {Next: LOOP LOOPA}
$EB/$4C/ { JMP Short Done}
{ForeGround:}
$3C/$10/ { CMP AL,16 ;if less than 16, then
change the}
$73/$07/ { JNC BackGround ;Foreground color.
otherwise jump.}
$80/$E4/$F0/ { and AH,0F0H ;Strip off old
Foreground.}
$0A/$E0/ { or AH,AL}
$EB/$F1/ { JMP Next}
{BackGround:}
$3C/$18/ { CMP AL,24 ;if less than 24, then
change the}
$74/$13/ { JZ NextLine ;background color. if
exactly 24,}
$73/$19/ { JNC FlashBittoggle ;then jump down to next
line.}
$2C/$10/ { SUB AL,16 ;otherwise jump to
multiple output}
$02/$C0/ { ADD AL,AL ;routines.}
$02/$C0/ { ADD AL,AL}
$02/$C0/ { ADD AL,AL}
$02/$C0/ { ADD AL,AL}
$80/$E4/$8F/ { and AH,8FH ;Strip off old
background.}
$0A/$E0/ { or AH,AL}
$EB/$DA/ { JMP Next}
{NextLine:}
$81/$C2/$A0/$00/ { ADD DX,160 ;if equal to 24,}
$8B/$FA/ { MOV DI,DX ;then jump down to}
$EB/$D2/ { JMP Next ;the next line.}
{FlashBittoggle:}
$3C/$1B/ { CMP AL,27 ;Does user want to toggle
the blink}
$72/$07/ { JC MultiOutput ;attribute?}
$75/$CC/ { JNZ Next}
$80/$F4/$80/ { xor AH,128 ;Done.}
$EB/$C7/ { JMP Next}
{MultiOutput:}
$3C/$19/ { CMP AL,25 ;Set Z flag if
multi-space output.}
$8B/$D9/ { MOV BX,CX ;Save main counter.}
$AC/ { LODSB ;Get count of number of
times}
$8A/$C8/ { MOV CL,AL ;to display Character.}
$B0/$20/ { MOV AL,32}
$74/$02/ { JZ StartOutput ;Jump here if displaying
spaces.}
$AC/ { LODSB ;otherwise get Character
to use.}
$4B/ { DEC BX ;Adjust main counter.}
{StartOutput:}
$32/$ED/ { xor CH,CH}
$41/ { inC CX}
$F3/$AB/ { REP StoSW}
$8B/$CB/ { MOV CX,BX}
$49/ { DEC CX ;Adjust main counter.}
$E0/$AA/ { LOOPNZ LOOPA ;Loop if anything else to
do...}
$1F); {Done: POP DS ;Restore data segment.}
end; {UNCRUNCH}
[Back to ANSI SWAG index] [Back to Main SWAG index] [Original]