DECLARE FUNCTION fromhex$ (in AS STRING) DECLARE FUNCTION peekhex$ (addr AS INTEGER) DECLARE FUNCTION tohex$ (in AS STRING) DECLARE FUNCTION asm$ (in AS STRING) ' Allocate a string to hold the font data. ' Each byte encodes a line of the font. ' There are 256 chars in the font * 16 lines per char. font$ = SPACE$(256 * 16) a$ = "" a$ = a$ + asm("55") ' push bp a$ = a$ + asm("89E5") ' mov bp,sp a$ = a$ + asm("56") ' push si a$ = a$ + asm("57") ' push di a$ = a$ + asm("1E") ' push ds a$ = a$ + asm("06") ' push es a$ = a$ + asm("50") ' push ax a$ = a$ + asm("53") ' push bx a$ = a$ + asm("51") ' push cx a$ = a$ + asm("52") ' push dx a$ = a$ + asm("368B7E0C") ' mov di,[ss:bp+0xc] a$ = a$ + asm("B83011") ' mov ax,0x1130 a$ = a$ + asm("B706") ' mov bh,0x6 a$ = a$ + asm("CD10") ' int 0x10 a$ = a$ + asm("1E") ' push ds a$ = a$ + asm("06") ' push es a$ = a$ + asm("1F") ' pop ds a$ = a$ + asm("07") ' pop es a$ = a$ + asm("89EE") ' mov si,bp a$ = a$ + asm("B90004") ' mov cx,0x400 a$ = a$ + asm("F366A5") ' rep movsd a$ = a$ + asm("5A") ' pop dx a$ = a$ + asm("59") ' pop cx a$ = a$ + asm("5B") ' pop bx a$ = a$ + asm("58") ' pop ax a$ = a$ + asm("07") ' pop es a$ = a$ + asm("1F") ' pop ds a$ = a$ + asm("5F") ' pop di a$ = a$ + asm("5E") ' pop si a$ = a$ + asm("5D") ' pop bp a$ = a$ + asm("CA0200") ' retf 0x2 CALL ABSOLUTE(SADD(font$), SADD(a$)) ' Draw a character from the font. char = ASC("@") FOR y = 0 TO 15 fontline = ASC(MID$(font$, 16 * char + y + 1, 1)) FOR x = 0 TO 7 bit = fontline AND (2 ^ (7 - x)) IF bit > 0 THEN PRINT "X"; ELSE PRINT "."; END IF NEXT x PRINT "" NEXT y FUNCTION asm$ (in AS STRING) out$ = "" FOR i = 1 TO LEN(in) STEP 2 byte$ = MID$(in, i, 2) value = VAL("&H" + byte$) out$ = out$ + CHR$(value) NEXT i asm = out$ END FUNCTION FUNCTION fromhex$ (in AS STRING) out$ = "" FOR i = 1 TO LEN(in) STEP 2 byte$ = MID$(in, i, 2) value = VAL("&H" + byte$) out$ = out$ + CHR$(value) NEXT i fromhex = out$ END FUNCTION FUNCTION peekhex$ (addr AS INTEGER) peekhex = tohex(CHR$(PEEK(addr)) + CHR$(PEEK(addr + 1))) END FUNCTION FUNCTION tohex$ (in AS STRING) out$ = "" map$ = "0123456789ABCDEF" FOR i = 1 TO LEN(in) byte = ASC(MID$(in, i, 1)) high = byte \ 16 low = byte MOD 16 out$ = out$ + MID$(map$, high + 1, 1) + MID$(map$, low + 1, 1) + " " NEXT i tohex = out$ END FUNCTION