once it got so drunk
ZXNet echo conference «code.zx»
From Kirill Frolov → To All 18 July 2004
Press RESET immediately, All!
Vega asked here once, I completely forgot. I’m writing here, maybe someone else
you will need:
global_key_init ; initialize keyboard driver
global_key_done ; stop keyboard driver
global_key_timer ; call 50 times per second
global_key_getc ; -> l=ascii code (0 if buffer is empty)
global_key_stat ; -> l=ff buffer is not empty, l=0 is empty
global_tty_putc ; E=letter on screen
global_tty_puts ; output a string (DE) of length BC.
global_tty_done ; freeing up resources, shutdown
global_tty_init ; initialization, required for the first time!
global_tty_timer ; 50 times per second
global_font42 ; 6-pixels wide monospace font
global_font64 ; 4-pixel wide monospace font
;
; 64x24 character text console emulator for ZX-Spectrum.
; Uses two font sets (left and right characters) in the format
; 1/3 of the screen file. During initialization, one font is specified in
; in which each familiar place contains two identical symbols (left and
right).
; The font must be specified in CP866 encoding.
;
scr5 equ 1 ; output to screen at address 0x4000 or 0xc000
global_font64 ; fonts 2048 bytes (left and right)
global_font_2 ; To work you only need font64,
; the second one is generated during initialization
global _mapscrn ; conversion table 256 bytesglobal_port_fe ; border port register status.
EXPORT global _tty_putc ; E=letter on screen
EXPORT global _tty_puts ; output a string (DE) of length BC.
EXPORT global _tty_done ; freeing up resources, shutdown
EXPORT global_tty_init ; initialization, required for the first time!
EXPORT global_tty_timer ; 50 times per second
psect text
;
; 0D carriage return
; 0A line feed
; 09 tab
; 08 left
; 18 right
; 19 up
; 1A down
; 0B H position 0.0
; 0C screen cleaning
; 16 K clear to the end of the line
; 15 line clearing
; 01 next symbol without checking
; 07 call
; 0F enable KOI-8
; 0E enable KOI-7 rus.
; Y[line+32][col+32] position setting
; [line+128][col] position setting
; P[color] color setting
; V[1=on,0=off] inversion setting
; J clear to the end of the screen (down)
; Q enable cursor; R turn off cursor
; [ enable 866 encoding
; Z enable KOI-8
; ] enable KOI-8
; enable KOI-7 lat.
; @ enable KOI-7 rus.
;
blink equ 12
width equal 64
hsize equ 24
_tty_done:
ret
_tty_init:
jp$+3
ttyinita equ $-2
ldhl,_font64
push ix
push hl
push hl
ld ix, _font_2 ; the letters are on the right.
ld e,0x0f
call fontmake
pop hl
pop ix
ld e,0x0f0
call fontmake
pop ix
ld hl,ttyinitb
ld (ttyinita), hl
ttyinitb:
ld hl, _mapscrn
xxloop: ld(hl),l ; generating a conversion table, first 866 codepage
inc l
jr nz,xxloop
call clspr
ret
fontmake: ld bc,0x0800
fmloop: ld a,(hl)
and e
ld(ix),a
inc hl
inc ix
dec bc
ld a,b
or c
jr nz,fmloop
ret
_tty_putc:
ld a, e
ld hl,curlock
ld(hl),1
call curs_off ; (hl, de)
tty_putc_int:
jpprcod
fjump equ $-2
_tty_puts:
push de
push bc
ld hl,curlock
ld(hl),1
call curs_off ; (hl, de)tty_puts1:
pop bc
pop hl
ld a, b
or c
ret z
ld a,(hl)
inc hl
dec bc
push hl
push bc
call tty_putc_int
jr tty_puts1
prcod: cp 0x20
jp nc,prchr ; печатный символ ?
ld hl,(coord)
cp 0x1b
jp z,esc
cp 0x0d
jp z,cr
cp 0x0a
jp z,lf
cp 0x09
jp z,tab
cp 0x08
jp z,left
cp 0x18
jp z,right
cp 0x19
jp z,up
cp 0x1a
jp z,down
cp 0x0b
jp z,home
cp 0x0c
jp z,clspr
cp 0x16
jp z,clrel
cp 0x15
jp z,clrln ; очистка стpоки
cp 0x01
jp z,grf ; печать последующего символа без обpаботки
cp 0x07
jp z,bell
cp 0x0f
jp z,mkkoi8 ; включение koi8
cp 0x0e
jp z,mkkoi7r ; koi7-r
prchr: ld l,a
ld h, _mapscrn/256
tblhi equ $-1 ; пеpекодиpовка по таблице
ld l,(hl)
ld de,0
coord equ $-2
srl e
jr c,prright
ld h, _font64/256
ld c,0x0f
jp prcalc
prright: ld h, _font_2/256
ld c,0x0f0
prcalc: ld a,c
cpl
and 0
inverse equ $-1
ld b,a
ld a,d
rrcarrca
rrca
and 0x0e0
or e
ld e,a
ld a,d
and 0x18
IF scr5
or 0x40
ELSE
or 0x0c0
ENDIF
ld d,a
ld a,(de) ; вывод буквы
and c
or (hl)
xor b
ld (de),a
inc d
inc h
ld a,(de)
and c
or (hl)
xor b
ld (de),a
inc d
inc h
ld a,(de)
and c
or (hl)
xor b
ld (de),a
inc d
inc h
ld a,(de)
and c
or (hl)
xor b
ld (de),a
inc d
inc h
ld a,(de)
and c
or (hl)
xor b
ld (de),a
inc d
inc h
ld a,(de)
and c
or (hl)
xor b
ld (de),a
inc d
inc h
ld a,(de)
and c
or (hl)
xor b
ld (de),a
inc d
inc h
ld a,(de)
and c
or (hl)
xor b
ld (de),a
; cf=0 d=110xx111 xx<>11
ld a,d
rra
rra
rra
IF scr5
and 0x07f
or 0x018
ELSE
ENDIF
ld d,a ; cf=1 d=110110xx
ld a,0x038
color equ $-1ld (de),a ; color setting
ld hl,curs_on
ld (curs_jp),hl ; the cursor is always missing (overwritten by a letter)
ld hl,(coord)
right: incl ; on the next position.
ld a,l
cp width
jr nc,nxtln ; moving beyond the right border of the screen?
ctaddr: ld (coord),hl ; setting coordinates.
xor a
ld (curlock),a
ret
home: ld hl,0 ; setting coordinates to 0.0.
jr ctaddr
nxtln: ld l,0 ; go to the beginning of the next lines
lf: ld a,hsize-1 ; move to next line
inc h
cp h
jp nc,ctaddr
dec h
jp scroll
lfovadr equ $-2
scroll: push hl ; scroll the screen one line up
IF scr5
ldhl,0x04020
ld de,0x04000
ELSE
ldhl,0x0c020
ld de,0x0c000
ENDIF
scroll0: ld a,d ; flower transfer
rrca
rrca
rrca
IF scr5
or 0x58
ELSE
or 0x0c0
ENDIF
ld d,a
ld a,h
rrca
rrca
rrca
IF scr5
or 0x58
ELSE
or 0x0c0
ENDIF
ld h,a
call ldi32
sla d
sla d
sla d
IF scr5
res 7.d
ENDIF
sla h
sla h
sla hIF scr5
res 7, h
ENDIF
scroll1: call ldi32 ; portable images
inc h
inc d
ld a, h
and 7
jp nz,scroll1 ; stpoku (8 pix. height) pepenes ?
ld a,l
add a,0x20
ld l,a ; on after. stpoku
ld a, h
jr z,scroll2 ; peshel on after. 1/3 screen
sub 8
ld h, a
jp scroll4
scroll2:
IF scr5
cp 0x51
ELSE
cp 0x0d1
ENDIF
jr c,scroll4
IF scr5
ld hl,0x050e0
ELSE
ld hl,0x0d0e0
ENDIF
ld e,l
ld c,1
call clrl01 ; cleaning last step
pop hl
jp ctaddr
scroll4: ld a,e
add a,0x20 ; on after. stpoku (present receiver)
ld e, a
jp z,scroll0
ld a,d
sub 8; on after. 1/3 screen
ld d, a
jp scroll0
ldi32: ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
ldi
dec hl
dec deld a,l
and 0x0e0
ld l,a
ld a,e
and 0x0e0
ld e,a
ret
tab: ld a,l ; табуляция
or 0x07
ld l,a
jp right
cr: ld l,0 ; возвpат каpетки
jp ctaddr
down: inc h ; вниз
ld a,h
cp hsize
jp c,ctaddr
ld h,0
jp ctaddr
left: dec l ; забой
ld a,l
inc a
jp nz,ctaddr
ld l,width-1
up: dec h ; ввеpх
ld a,h
inc a
jp nz,ctaddr
ld h,hsize-1
jp ctaddr
clrel: push hl ; clear to end of line
ld hl,ctaddr
ld (lfovadr),hl
clrel1: ld a,0x20
call prchr
ld a,l
or a
jr nz,clrel1
ld hl,scroll
ld (lfovadr),hl
pop hl
jp ctaddr
esc: ld hl,esc1 ; ESC последовательность
setfjp: ld (fjump),hl
rcurs: ld hl,curlock
ld (hl),0
ret
esc1: cp 0x80
jr nc,posit ; установка позиции сейчас [+1 byte]
cp 'Y'
jr z,pposit ; установка позиции на след. символе [+2 bytes]
cp 'P'
jp z,setcol ; установка цветов [+1 byte]
cp 'V'
jp z,setinv ; установка инвеpсии [+1 bytes]
ld hl,prcodld (fjump),hl ; the next character will not be a continuation of the last ESC.
cp 'H'
jp z,home ; setting 0.0.
ld hl,(coord)
cp 'K'
jr z,clrel ; clear to the end of the line
cp 'J'
jp z,clres ; clearing to the end of the screen
cp 'Q'
jp z, cmode0 ; \n
cp 'R' ; | enable/disable cursor
jp z, cmode1 ; /
cp '['
jp z,mkalt ; set 866 code page
cp 'Z'
jp z,mkkoi8 ; set koi8 code page
cp ']'
jp z,mkkoi8 ; set koi8
cp 0x05c
jp z,mkkoi7l ; koi7 latin characters
cp '@'
jp z,mkkoi7r ; koi7 with Russian characters
jpprchr
pposit: ld hl,pposit1 ; setting the position to the next symbol [+2 bytes]
jr setfjp
pposit1: sub 0x20 ; first coordinate -- line
ld(pcoord),a
ld hl,pposit2
jr setfjp
pposit2: sub 0x20 ; column
jr setpos
posit: and 0x7f ; setting position now [+1 byte]
ld (pcoord),a ; coordinate line.
ld hl,posit1
jr setfjp
posit1: and 0x7f ; column
setpos: ld hl,prcod
ld (fjump),hl
cp width ; checking the established coordinates
jp nc,rcurs ; for compliance with screen parameters
ld l,ald a,hsize-1
ld h,0
pcoord equ $-1
cp h
jpc,rcurs ; CF coordinates outside the screen
jp ctaddr
grf: ld hl,grf1 ; printing the next character without processing
jpsetfjp
grf1: ld hl,prcod
ld (fjump),hl
jpprchr
bell: ld a, (_port_fe) ; call.
ldc,120; parity numbers only
bell1: xor 0x10
out (0x0fe),a ; use beeper
ld b,80
djnz$
dec c
jr nz,bell1
jp rcurs
clspr: ld hl,0 ; clearing the screen
ld (coord),hl
IF scr5
ld h,0x40
ELSE
ld h,0x0c0
ENDIF
ld c,hsize
ld e,l
jr clrl01
clrln: ld c,1 ; clearing a line
jr clrln1
clres: ld a,hsize ; clearing to the end of the screen
sub h
ldc,a
clrln1: ld hl,(coord)
srl l
ld a,h
rrca
rrca
rrca
and 0x0e0
or l
ld l,a
ld a,h
and 0x18
IF scr5
or 0x40
ELSE
or 0x0c0
ENDIF
ld h,a
ld a,l
and 0x0e0
clrl0: ld e,a
clrl01: ld l,e ; line coloring
ld a,h
rrca
rrca
rrca
IF scr5or 0x58
ELSE
or 0x0c0
ENDIF
ld h,a
ld a,(color)
call fill32
sla h
sla h
sla h
IF scr5
res 7,h
ENDIF
clrl1: ld l,e ; очистка стpоки
xor a
call fill32
inc l
inc h
ld a,h
and 7
jp nz,clrl1
dec c
jp z,rcurs
ld a,l
or a
jr z,clrl0
ld a,h
sub 8
ld h,a
ld a,l
jp clrl0
fill32: ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc lld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
inc l
ld (hl),a
ret
setcol: ld hl,setcol1 ; установка цвета
jp setfjp
setcol1: ld (color),a
and 0x38
rrca
rrca
rrca
ld hl, _port_fe
xor (hl)
and 0xf8
xor (hl)
ld (hl),a
out (0x0fe),a
restfjp: ld hl,prcod
ld (fjump),hl
jp rcurs
setinv: ld hl,setinv1 ; установка инвеpсии.
jp setfjp
setinv1: and 1
jr z,setinv2
ld a,0x0ff
setinv2: ld (inverse),a
jr restfjp
cmode0: xor a ; включить / выключить куpсоp
jr cmodes
cmode1: ld a,1
cmodes: ld (curmode),a
jp rcurs
mkalt: ld hl,rcurs ; 866 code page
push hl
ld bc,0x0c040
mkalt1: ld hl,(tblhi-1)
ld l,0x40
mkalt2: ld (hl),c
inc c
inc l
djnz mkalt2
ret
mkkoi8: ld bc,0x4040 ; koi8
call mkalt1
mkkoi8h: ld bc,0x20c0
call mkalt2
ld bc,0x10f0
call mkalt2
ld bc,0x10b0
call mkalt2
call koi7s
ld (hl),0x0ea
inc l
call koi7b
ld (hl),0x9ajp rcurs
mkkoi7l: ld bc,0x2040
call mkalt1
mkkoi7e: call koi7b
ld (hl),l
inc l
jr mkkoi8h
mkkoi7r: ld hl,(tblhi-1)
ld l,0x40
call koi7s
ld (hl),l
inc hl
jr mkkoi7e
koi7b: ld de,tkoi1
call koi7m
ld bc,0x0888
call mkalt2
ld (hl),0x9f
inc l
ld bc,0x0490
call mkalt2
ld de,tkoi2
koi7m: ex de,hl
ld bc,9
ldir
ex de,hl
ret
koi7s: ld de,tkoi1
call koi7n
ld bc,0x08a8
call mkalt2
ld (hl),0x0ef
inc l
ld bc,0x04e0
call mkalt2
ld de,tkoi2
koi7n: ld b,9
koi71: ld a,(de)
inc de
bit 4,a
jr z,koi72
and 0x0ef
or 0x40
koi72: or 0x20
ld (hl),a
inc l
djnz koi71
ret
_tty_timer:
ld a,0 ; мигалка для куpсоpа
curlock equ $-1 ; запоp
dec a
ret z
ld a,0
curmode equ $-1 ; куpсоp включен ?
dec a
ret z
ld hl,curcnt
dec (hl) ; вpемя подошло ?
ret nz
ld (hl),blink ; частота мигания
jp curs_on
curs_jp equ $-2
curs_on: ld hl,(coord) ; включение куpсоpа
srl l
jr c,curight
ld c,0x0f0
jp cucalccuright: ld c,0x0f
cucalc: ld a,h
rrca
rrca
rrca
and 0x0e0
or l
ld l,a
ld a,h
and 0x18
IF scr5
or 0x47
ELSE
or 0x0c7
ENDIF
ld h,a
ld (curaddr),hl
ld a,(hl)
ld e,a
or c
ld (hl),a
dec h
ld a,(hl)
ld d,a
or c
ld (hl),a
ld (cursafe),de
ld hl,curs_off
ld (curs_jp),hl
ld (hl),0x021 ; LD HL,NN
ret
curs_off: ld hl,0 ; выключение куpсоpа
curaddr equ $-2
ld de,0
cursafe equ $-2
ld (hl),e
dec h
ld (hl),d
ld hl,curs_on
ld (curs_jp),hl
ld hl,curcnt
ld (hl),blink
ld hl,curs_off
ld (hl),0x0c9 ; RET
ret
psect data
curcnt: db blink ; счётчик для мигалки
psect text
tkoi1: db 0x9e,0x80,0x81,0x96,0x84,0x85,0x94,0x83,0x95
tkoi2: db 0x086,0x082,0x09c,0x09b,0x087,0x098,0x09d,0x099,0x097
From Kirill Frolov → To Kirill Frolov 18 July 2004
Press RESET immediately, Kirill Frolov!
On Sun, 18 Jul 2004 10:01:11 +0000 (UTC), Kirill Frolov wrote:
KF> Vega asked here once, I completely forgot. I’m writing here, maybe for someone else
KF> you will need:
Parts of the text cannot be written in koi8, so right inside the text
they are encoded in base64... It is important that when decoding
CP866 encoding must be used.
;
; ZX-SPECTRUM keyboard driver.
;
; Switching Russian/Latin -- CAPS SHIFT
; CONTROL key -- EXT MODE (CAPS and SYMBOL SHIFT simultaneously)
; CTRL-Z is not processed (CTRL-0 is used)
;
EXPORT global_key_init ; initialize keyboard driver
EXPORT global _key_done ; stop keyboard driver
EXPORT global_key_timer ; call 50 times per second
EXPORT global_key_getc ; -> l=ascii code (0 if buffer is empty)
EXPORT global_key_stat ; -> l=ff buffer is not empty, l=0 is empty
DELAY1 equ 1 ; Anti-bounce when pressed
DELAY2 equ 10 ; auto repeat delay
DELAY3 equ 2 ; auto repeat period
RIPDEL equ 3 ; button death time (for rattling keyboards)
RUSTIME1 equ 50 ; maximum CAPS holding time for RUS/LAT switch
RUSTIME2 equ 50-2 ; minimum time ^^^ (subtract from maximum!)
; THE DRIVER _CANNOT_ RETURN KEYS WITH CODE 0.
; THE CODE IS USED TO OPERATE THE DRIVER ITSELF.; Code 1 is occupied by the CAPS LOCK key! (cannot be used without recoding)
; KOI-7R coding:
; @ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~[^]
; YuABTSDEFGHIYKLMHNOPYARSTZHVIYZSHESCHCHYUBTSDEFGHIYKLMNOPIAPSTZHVIZSHESCHCH
; KOI-8 table:
; A3 B3
; her
;
; C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
; y a b c d e f g x i j k l m n o
;
; D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
; p i p s t u v y z sh e sch h
;
; E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
; J A B C D E F G H I J K L M H O
;
; F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
; P I R S T U ZH V Y Z S H E SCH H
;
psect text
keylat:
CWRiICIgIiwwLCJNTkIiLDB4MEQsIkxLSkhQT0lVWTA5ODc2MTIzNDVRV0VSVEFTREZHIiww
LCJaWENWIgo=
key866:
CWRiICIgIiwwLCLt7uIiLDB4MEQsIuzr6ujw7+n1+TA5ODc2MTIzNDXx9+Xy9OHz5ObnIiww
LCL6+OP2Igo=
keykoi:
CWRiICIgIiwwLCLt7uIiLDB4MEQsIuzr6ujw7+n1+TA5ODc2MTIzNDXx9+Xy9OHz5ObnIiww
LCL6+OP2Igo=
symlat:
CWRiIDB4MUIsMCwiLiwqIiwweDBCLCI9Ky1eIiwweDIyLCI7IiwweDBDLCJdW18pKCcmIUAj
JCUiLDEsMHgwRiw2LCI8Pn58XHt9IiwwLCI6YD8vIgo=
sym866:
CWRiIDB4MUIsMCwiLiwqIiwweDBCLCI9Ky1eIiwweDIyLCI7IiwweDBDLCJdW18pKCcmISIs
IvAiLCIjJCUiLDEsMHgwRiw2LCI8PpedmpiZIiwwLCI6YD8vIgo=
symkoi:
CWRiIDB4MUIsMCwiLiwqIiwweDBCLCI9Ky1eIiwweDIyLCI7IiwweDBDLCJdW18pKCcmISIs
IrMiLCIjJCUiLDEsMHgwRiw2LCI8Pv78//v9IiwwLCI6YD8vIgo=; 0 1 2 3 4 5 6 7 8 9
capsnum: db 0x7F,0x09,0x0FC,0x12,0x03,0x08,0x18,0x05,0x04,0x07
ctrlnum: db 0x1b,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b
SS_ equ 1
CS_ equ 35 ; scan codes 4 caps & sybol shift
CL_KEY equ 0x96 ; CAPS LOCK scan code |
KOI_KEY equ 0x0d2 ; EXT-8 пеpеключение в КОИ-8 | сканкоды, HЕ ASCII !
KEY_866 equ 0x0d1 ; EXT-9 пеpеключение в 866 |
CS_SPC equ 0x1B ; BREAK = ESCAPE
CS_ENT equ 0x0A ; LINE FEED
CTRL_ENT equ 0x1a ; CTRL-Z не ввести чеpез Z (Z и SPC с EXT не
нажимаются)
psect data
keybuf: db 0,0,0,0,0,0,0,0,0,0,0,0 ; 0=empty
keybuftop equ $
ripcnt: db 0
;----------------------------------------------------------------------
psect text
_key_init:
_key_done:
ret
set_866: ld de,key866
ld hl,sym866
jr set_codepage
set_koi: ld de,keykoi
ld hl,symkoi
set_codepage: xor a
ld (keycnt),a ; автоповтоp запpещен
ld (keyrus),de
ld (symrus),hl
ld hl,(keytbl)
ld de,keylat ; обновить адpеса таблиц
sbc hl,de
jr z,tolat
jr torus
ripkey: bit 7,d
ld a,0
ruscnt equ $-1jr z, riprus ; CAPS released?
or a
jr z,ripcont ; locked
dec a
jr nz,ripcont ; reduced
inc a
jr ripcont ; less than 1 is not allowed
riprus: cp 2
jr c, ripnorus ; check 1
From Kirill Frolov → To All 18 July 2004
Press RESET immediately, Kirill Frolov!
On Sun, 18 Jul 2004 10:11:19 +0000 (UTC), Kirill Frolov wrote:
KF>> Vega asked here once, I completely forgot. I’m writing here, maybe for someone else
KF>> you will need:
Let me remind you that there is also a console driver for the 512x192 mode.
In addition to the previous one, from the library:
globalcls; clear the screen, no arguments
global inpkey ; wait until key pressed -> A=code
global input ; input line, HL=*buffer of size >= A+1 bytes
global pryesno; print 'yes' if A is not 0, else print 'no'.
global pronoff ; print 'on' if A is not 0, else print 'off'.
global prnewln ; print CR[/LF]
global prchar ; A=char,HL _NOT CHANGED_
global prdec ; print decimal BC=0..65535
global prdecl ; print decimal (DE,BC)=0..4*10^10
global prhexl ; print hex (DE,BC)=0..FFFFFFFFh
global prhexw ; print hex (BC)=0..FFFFh
global prhexb ; print hex (A)=0..FFh
global printhl ; output message from (hl)
global printsp ; output message from (sp)
global prsafe_a ; print A char, only printable chars.
global prsafe_hl ; print HL string, only printable chars.
EXPORT global cls ; clear the screen, no arguments
global prchar
psect text
cls:
#ifdef BASIC_IO
call 0x0d6b
ld a, 2
jp 0x1601
#else
ld a, 12
jp prchar
#endifEXPORT global inpkey ; wait until key pressed -> A=code
#include
; global_key_stat
; global_key_getc
psect text
inpkey:
#ifdef BASIC_IO
ei
res 5, (iy+1)
inpkey0: bit 5, (iy+1)
jr z,inpkey0
ld a, (iy-50)
ret
#else
inpkey0:
call_key_stat
inc l
dec l
jr nz, inpkey1
halt
jr inpkey0
inpkey1:
call_key_getc
ld a, l
ret
#endif
EXPORT global input ; input line, HL=*buffer of size >= A+1 bytes
global prchar
global inpkey
global printsp
psect text
; input string in (HL)
; with a maximum length of reg. A
; HL address must be reserved
; memory area A+1 byte.
; The input line must be null-terminated.
input:
inc a
ld (inpl), a
xor a
ld (inps), a
#ifdef BASIC_IO
res 3, (iy+2)
push hl
ld a, 1
call 0x1601
pop hl
#endif
inp0:
#ifdef BASIC_IO
push hl
call printsp
db 18, 1, "?", 18, 0xff, 8, 0
pop hl
#endif
ld (hl), 0
#ifdef BASIC_IO
push hl
call 0x15de
pop hl
scf
ret z
#else
push hl
call inpkey
pop hl
#endif
#ifdef BASIC_IO
cp 0x0c
jr z,inpdl
#else
cp 8 ; <-
jr z,inpdl cp 0x7f ; delete
jr z, inpdl
#endif
cp 13
ret z ; enter
cp " "
jr nc, inp1
jr inp0
inpdl:
ld a, 0
inps equ $-1
or a
jr z, inp3
dec a
ld (inps), a
ex de, hl
ld hl, inpl
inc (hl)
ex de, hl
dec hl
#ifdef BASIC_IO
push hl
call printsp
db " ", 8, 8, " ", 8, 0
pop hl
#else
push hl
call printsp
db 8, " ", 8, 0
pop hl
#endif
jr inp0
inp1:
ld b, 0
inpl equ $-1
djnz inp2
inp3:
#ifdef BASIC_IO
push hl
ld hl, 100
ld de, 100
call 0x03b5 ;6
pop hl
#else
ld a, 7
call prchar
#endif
jr inp0
inp2:
ex de, hl
ld hl, inpl
ld (hl), b
ld hl, inps
inc (hl)
ex de, hl
ld (hl), a
inc hl
call prchar
jr inp0
EXPORT global pryesno ; print 'yes' if A is not 0, else print 'no'.
EXPORT global pronoff ; print 'on' if A is not 0, else print 'off'.
global printhl
psect text
pryesno:
ld hl, _prno
or a
jr z, $+5
ld hl, _pryes
jp printhl
_prno: db "no", 0
_pryes: db "yes", 0
pronoff:
ld hl, _pron
or a
jr z, $+5
ld hl, _proff
jp printhl
_pron: db "on", 0
_proff: db "off", 0
EXPORT global prnewln ; print CR[/LF]
EXPORT global prchar ; A=char, HL _NOT CHANGED_
#include
psect text
prnewln:
ld a, 13
call prchar
#ifndef BASIC_IO
ld a, 10
; jp prchar
#endif
prchar:
#ifdef BASIC_IO
jp 0x0010
#else
push hl
ld e, a
call _tty_putc
pop hl
ret
#endif
EXPORT global prdec ; print decimal BC=0..65535
#include
; global wtoa
global printhl
psect text
prdec:
ld e, c
ld d, b
ld hl, -6
add hl, sp
ld sp, hl
push hl
call wtoa
pop hl
call printhl
pop hl
pop hl
pop hl
ret
EXPORT global prdecl ; print decimal (DE,BC)=0..4*10^10
#include
; global ltoa
global printhl
psect text
prdecl:
ld hl, -11
add hl, sp
ld sp, hl
push hl
call ltoa
pop hl
call printhl
ld hl, 11
add hl, sp
ld sp, hl
ret
EXPORT global prhexl ; print hex (DE,BC)=0..FFFFFFFFh
EXPORT global prhexw ; print hex (BC)=0..FFFFh
EXPORT global prhexb ; print hex (A)=0..FFh
#include
; global htoa
global printhl
psect text
; de,bc
prhexl:
push bc
ld c, e
ld b, d
call prhexw
pop bc
jr prhexw
; bc=0..FFFF
prhexw:
push bc
ld a, b
call prhexb
pop bc
ld a, c
jr prhexb
; a=0..FF
prhexb:
ld hl, -4
add hl, sp
ld sp, hl
push hl
call htoa
pop hl
call printhl
pop hl
pop hl
ret
EXPORT global printhl ; вывод сообщения из (hl)
#include
#include
global prchar
psect text
printhl:
#ifdef BASIC_IO
push hl
ld a, 2
call 0x1601 ; TODO 2/1chn
pop hl
printhl0:
ld a, (hl)
inc hl
or a
ret z
inc a
jr z, $+3
dec a
call prchar
jr printhl0
#else ; 'normal' console
push hl
call strlen
;dec bc ; FIXED BUG
ld a, b
or c
pop de
ret z
jp _tty_puts
#endif
EXPORT global printsp ; вывод сообщения из (sp)
#include
global prchar
global printhl
psect text
printsp:
#ifdef BASIC_IO
ld a, 2
call 0x1601 ; TODO 2/1chn
pop hl
call printhl
jp (hl) ; TODO !!!
#else ; 'normal' console
pop hl
push hl
xor a
ld b, a ld c, a
cpir
ex (sp), hl
jp printhl
#endif
EXPORT global prsafe_a ; print A char, only printable chars.
EXPORT global prsafe_hl ; print HL string, only printable chars.
global prchar
psect text
prsafe_a:
cp 0x20
jr nc, $+4
ld a, "?"
jp prchar
prsafe_hl:
ld a, (hl)
inc hl
or a
ret z
#ifdef BASIC_IO
inc a
jr z, $+3
dec a
#endif
call prsafe_a
jr prsafe_hl
From Kirill Frolov → To Kirill Frolov 18 July 2004
Hемедленно нажми на RESET, Kirill Frolov!
On Sun, 18 Jul 2004 10:01:11 +0000 (UTC), Kirill Frolov wrote:
KF> global _font42 ; 6-pixels wide monospace font
KF> global _font64 ; 4-pixels wide monospace font
Шрифты:
EXPORT global _font42 ; 6-pixels wide monospace font
psect adata ;, local, class=DATA, reloc=256
_font42:
db 0x00, 0x38, 0xC4, 0x00, 0x00, 0x10, 0x10, 0x00, 0xFC, 0x00, 0xFC,
0x00, 0x00, 0x00, 0x0C, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x78
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00 db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x88, 0xA8, 0xFC, 0x10, 0x10, 0x10, 0x28, 0x00, 0x00, 0x28, 0x28,
0x00, 0x28, 0x28, 0x10, 0x00
db 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x28, 0x28, 0x00, 0x28,
0x00, 0x28, 0x00, 0x28, 0x10
db 0x28, 0x00, 0x00, 0x28, 0x10, 0x00, 0x00, 0x28, 0x10, 0x10, 0x00,
0xFC, 0x00, 0xE0, 0x1C, 0xFC
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x28, 0x28, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x60, 0x60, 0x00, 0x00
db 0x00, 0x44, 0xB8, 0x28, 0x10, 0x38, 0x38, 0x00, 0xFC, 0x00, 0xFC,
0x1C, 0x38, 0x10, 0x14, 0x00
db 0x60, 0x18, 0x10, 0x48, 0x3C, 0x40, 0x00, 0x78, 0x10, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x10, 0x48, 0x00, 0x10, 0x00, 0x10, 0x10, 0x08, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x38, 0x10, 0x38, 0x38, 0x08, 0x7C, 0x38, 0x7C, 0x38, 0x38, 0x00,
0x00, 0x00, 0x00, 0x00, 0x38
db 0x38, 0x30, 0x70, 0x30, 0x70, 0x78, 0x78, 0x30, 0x48, 0x38, 0x38,
0x48, 0x40, 0x44, 0x48, 0x30
db 0x70, 0x30, 0x70, 0x30, 0x7C, 0x48, 0x44, 0x44, 0x44, 0x44, 0x78,
0x1C, 0x00, 0x70, 0x30, 0x00
db 0x20, 0x00, 0x40, 0x00, 0x08, 0x00, 0x18, 0x00, 0x40, 0x10, 0x08,
0x20, 0x20, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1C, 0x08, 0x70, 0x28, 0x84
db 0x30, 0x78, 0x70, 0x78, 0x18, 0x78, 0x54, 0x30, 0x48, 0x48, 0x48,
0x18, 0x44, 0x48, 0x30, 0x78
db 0x70, 0x30, 0x7C, 0x48, 0x38, 0x44, 0x48, 0x48, 0x54, 0x54, 0xC0,
0x44, 0x40, 0x70, 0x58, 0x38
db 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x20, 0x00, 0xA8, 0x10, 0x10, 0x10, 0x28, 0x00, 0x00, 0x28, 0x28,
0x00, 0x28, 0x28, 0x10, 0x00
db 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x28, 0x28, 0x00, 0x28,
0x00, 0x28, 0x00, 0x28, 0x10
db 0x28, 0x00, 0x00, 0x28, 0x10, 0x00, 0x00, 0x28, 0x10, 0x10, 0x00,
0xFC, 0x00, 0xE0, 0x1C, 0xFC
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x40, 0x08, 0x70, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00,
0x04, 0x50, 0x10, 0x00, 0x00
db 0x00, 0x6C, 0x90, 0x7C, 0x38, 0x54, 0x7C, 0x30, 0xCC, 0x30, 0xCC,
0x0C, 0x44, 0x18, 0x2C, 0x54
db 0x70, 0x38, 0x38, 0x48, 0x54, 0x30, 0x00, 0x30, 0x38, 0x10, 0x10,
0x10, 0x00, 0x00, 0x10, 0x7C
db 0x00, 0x10, 0x48, 0x28, 0x7C, 0x64, 0x28, 0x10, 0x10, 0x10, 0x28,
0x10, 0x00, 0x00, 0x00, 0x04
db 0x4C, 0x30, 0x44, 0x44, 0x18, 0x40, 0x40, 0x04, 0x44, 0x44, 0x00,
0x10, 0x08, 0x00, 0x20, 0x44
db 0x4C, 0x48, 0x48, 0x48, 0x48, 0x40, 0x40, 0x48, 0x48, 0x10, 0x08,
0x48, 0x40, 0x6C, 0x48, 0x48
db 0x48, 0x48, 0x48, 0x40, 0x10, 0x48, 0x44, 0x44, 0x28, 0x44, 0x08,
0x10, 0x40, 0x10, 0x48, 0x00
db 0x20, 0x30, 0x40, 0x38, 0x08, 0x38, 0x20, 0x38, 0x40, 0x00, 0x00,
0x28, 0x20, 0x68, 0x70, 0x30
db 0x70, 0x38, 0x58, 0x38, 0x70, 0x48, 0x44, 0x44, 0x44, 0x48, 0x78,
0x10, 0x08, 0x10, 0x50, 0xB4
db 0x48, 0x40, 0x48, 0x40, 0x28, 0x40, 0x54, 0x48, 0x48, 0x48, 0x48,
0x28, 0x6C, 0x48, 0x48, 0x48
db 0x48, 0x48, 0x10, 0x48, 0x54, 0x28, 0x48, 0x48, 0x54, 0x54, 0x40,
0x44, 0x40, 0x08, 0x64, 0x48
db 0x30, 0x38, 0x70, 0x78, 0x38, 0x38, 0x54, 0x38, 0x48, 0x48, 0x48,
0x18, 0x44, 0x48, 0x30, 0x78
db 0x88, 0xA8, 0xFC, 0x10, 0x10, 0xF0, 0x28, 0x00, 0xF0, 0xE8, 0x28,
0xF8, 0xE8, 0x28, 0xF0, 0x00
db 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x1C, 0x28, 0x2C, 0x3C, 0xEC,
0xFC, 0x2C, 0xFC, 0xEC, 0xFC
db 0x28, 0xFC, 0x00, 0x28, 0x1C, 0x1C, 0x00, 0x28, 0xFC, 0x10, 0x00,
0xFC, 0x00, 0xE0, 0x1C, 0xFC
db 0x70, 0x30, 0x7C, 0x48, 0x38, 0x44, 0x48, 0x48, 0x44, 0x44, 0xC0,
0x44, 0x40, 0x38, 0x58, 0x38
db 0x7C, 0x38, 0x20, 0x10, 0x60, 0x10, 0x10, 0x24, 0x50, 0x70, 0x20,
0xC8, 0x50, 0x20, 0x78, 0x00
db 0x00, 0x44, 0xB8, 0x7C, 0x7C, 0x7C, 0x7C, 0x78, 0x84, 0x48, 0xB4,
0x34, 0x38, 0x18, 0x34, 0x38
db 0x78, 0x78, 0x10, 0x48, 0x54, 0x48, 0x00, 0x30, 0x54, 0x10, 0x08,
0x20, 0x00, 0x28, 0x38, 0x7C
db 0x00, 0x10, 0x00, 0x7C, 0x50, 0x68, 0x10, 0x20, 0x10, 0x10, 0x10,
0x10, 0x00, 0x00, 0x00, 0x08
db 0x54, 0x50, 0x04, 0x08, 0x28, 0x78, 0x78, 0x08, 0x38, 0x44, 0x10,
0x00, 0x10, 0x7C, 0x10, 0x08
db 0x54, 0x48, 0x70, 0x40, 0x48, 0x70, 0x70, 0x40, 0x78, 0x10, 0x08,
0x70, 0x40, 0x54, 0x68, 0x48
db 0x48, 0x48, 0x48, 0x30, 0x10, 0x48, 0x44, 0x44, 0x10, 0x28, 0x10,
0x10, 0x20, 0x10, 0x00, 0x00
db 0x10, 0x08, 0x70, 0x40, 0x38, 0x44, 0x70, 0x48, 0x70, 0x30, 0x08,
0x30, 0x20, 0x54, 0x48, 0x48
db 0x48, 0x48, 0x60, 0x40, 0x20, 0x48, 0x44, 0x54, 0x28, 0x48, 0x08,
0x60, 0x08, 0x0C, 0x00, 0xA4
db 0x48, 0x70, 0x70, 0x40, 0x28, 0x70, 0x38, 0x10, 0x58, 0x58, 0x70,
0x28, 0x54, 0x78, 0x48, 0x48
db 0x48, 0x40, 0x10, 0x48, 0x54, 0x10, 0x48, 0x48, 0x54, 0x54, 0x70,
0x74, 0x70, 0x38, 0x64, 0x48
db 0x08, 0x40, 0x48, 0x40, 0x48, 0x44, 0x54, 0x44, 0x48, 0x48, 0x50,
0x28, 0x6C, 0x48, 0x48, 0x48
db 0x20, 0x00, 0xA8, 0x10, 0xF0, 0x10, 0xE8, 0xF8, 0x10, 0x08, 0x28,
0x08, 0x08, 0xF8, 0x10, 0xF0
db 0x1C, 0xFC, 0xFC, 0x1C, 0xFC, 0xFC, 0x10, 0x2C, 0x20, 0x20, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00
db 0xFC, 0x00, 0xFC, 0x3C, 0x10, 0x10, 0x3C, 0xFC, 0x10, 0xF0, 0x1C,
0xFC, 0x00, 0xE0, 0x1C, 0xFC
db 0x48, 0x48, 0x10, 0x48, 0x54, 0x28, 0x48, 0x48, 0x54, 0x54, 0x40,
0x44, 0x40, 0x44, 0x64, 0x48
db 0x40, 0x44, 0x10, 0x20, 0x40, 0x10, 0x00, 0x58, 0x20, 0x20, 0x00,
0x48, 0x50, 0x70, 0x78, 0x00
db 0x00, 0x54, 0xA8, 0x7C, 0x7C, 0x54, 0x54, 0x78, 0x84, 0x48, 0xB4,
0x50, 0x10, 0x14, 0x2C, 0x6C
db 0x78, 0x78, 0x10, 0x48, 0x34, 0x30, 0x00, 0x78, 0x10, 0x54, 0x7C,
0x7C, 0x00, 0x7C, 0x7C, 0x38
db 0x00, 0x10, 0x00, 0x28, 0x7C, 0x10, 0x2C, 0x00, 0x10, 0x10, 0x7C,
0x7C, 0x00, 0x7C, 0x00, 0x10
db 0x54, 0x10, 0x38, 0x04, 0x48, 0x04, 0x44, 0x08, 0x44, 0x3C, 0x00,
0x00, 0x20, 0x00, 0x08, 0x10
db 0x5C, 0x78, 0x48, 0x40, 0x48, 0x40, 0x40, 0x58, 0x48, 0x10, 0x08,
0x50, 0x40, 0x44, 0x58, 0x48
db 0x70, 0x48, 0x70, 0x08, 0x10, 0x48, 0x44, 0x44, 0x10, 0x10, 0x20,
0x10, 0x10, 0x10, 0x00, 0x00
db 0x00, 0x38, 0x48, 0x40, 0x48, 0x78, 0x20, 0x48, 0x48, 0x10, 0x08,
0x30, 0x20, 0x54, 0x48, 0x48
db 0x48, 0x48, 0x40, 0x38, 0x20, 0x48, 0x28, 0x54, 0x10, 0x48, 0x30,
0x10, 0x08, 0x10, 0x00, 0xB4
db 0x78, 0x48, 0x48, 0x40, 0x28, 0x40, 0x38, 0x08, 0x68, 0x68, 0x50,
0x28, 0x44, 0x48, 0x48, 0x48
db 0x70, 0x40, 0x10, 0x38, 0x38, 0x10, 0x48, 0x38, 0x54, 0x54, 0x48,
0x4C, 0x48, 0x08, 0x64, 0x38
db 0x38, 0x78, 0x70, 0x40, 0x48, 0x78, 0x38, 0x18, 0x58, 0x58, 0x60,
0x28, 0x54, 0x78, 0x48, 0x48
db 0x88, 0xA8, 0xFC, 0x10, 0x10, 0xF0, 0x28, 0x28, 0xF0, 0xE8, 0x28,
0xE8, 0xF8, 0x00, 0xF0, 0x10
db 0x00, 0x00, 0x10, 0x10, 0x00, 0x10, 0x1C, 0x28, 0x3C, 0x2C, 0xFC,
0xEC, 0x2C, 0xFC, 0xEC, 0xFC
db 0x00, 0xFC, 0x28, 0x00, 0x1C, 0x1C, 0x28, 0x28, 0xFC, 0x00, 0x10,
0xFC, 0xFE, 0xE0, 0x1C, 0x00
db 0x48, 0x40, 0x10, 0x48, 0x54, 0x10, 0x48, 0x38, 0x54, 0x54, 0x70,
0x74, 0x70, 0x1C, 0x64, 0x38
db 0x78, 0x78, 0x20, 0x10, 0x40, 0x10, 0x7C, 0x24, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x78, 0x00
db 0x00, 0x44, 0xB8, 0x38, 0x38, 0x10, 0x10, 0x30, 0xCC, 0x30, 0xCC,
0x50, 0x7C, 0x34, 0x6C, 0x38
db 0x70, 0x38, 0x38, 0x00, 0x14, 0x08, 0x00, 0x30, 0x10, 0x38, 0x08,
0x20, 0x80, 0x28, 0x7C, 0x10
db 0x00, 0x00, 0x00, 0x7C, 0x14, 0x2C, 0x48, 0x00, 0x10, 0x10, 0x10,
0x10, 0x10, 0x00, 0x18, 0x20
db 0x64, 0x10, 0x40, 0x44, 0x7C, 0x44, 0x44, 0x10, 0x44, 0x04, 0x00,
0x10, 0x10, 0x7C, 0x10, 0x00
db 0x40, 0x48, 0x48, 0x48, 0x48, 0x40, 0x40, 0x48, 0x48, 0x10, 0x48,
0x48, 0x40, 0x44, 0x48, 0x48
db 0x40, 0x50, 0x50, 0x48, 0x10, 0x48, 0x28, 0x54, 0x28, 0x10, 0x40,
0x10, 0x08, 0x10, 0x00, 0x00
db 0x00, 0x48, 0x48, 0x40, 0x48, 0x40, 0x20, 0x38, 0x48, 0x10, 0x08,
0x28, 0x20, 0x54, 0x48, 0x48
db 0x70, 0x38, 0x40, 0x04, 0x20, 0x48, 0x28, 0x54, 0x28, 0x38, 0x40,
0x10, 0x08, 0x10, 0x00, 0x84
db 0x48, 0x48, 0x48, 0x40, 0x28, 0x40, 0x54, 0x48, 0x48, 0x48, 0x48,
0x28, 0x44, 0x48, 0x48, 0x48
db 0x40, 0x48, 0x10, 0x08, 0x10, 0x28, 0x48, 0x08, 0x54, 0x54, 0x48,
0x4C, 0x48, 0x08, 0x64, 0x28
db 0x48, 0x44, 0x48, 0x40, 0x48, 0x40, 0x54, 0x44, 0x68, 0x68, 0x50,
0x28, 0x44, 0x48, 0x48, 0x48
db 0x20, 0x00, 0xA8, 0x10, 0x10, 0x10, 0x28, 0x28, 0x10, 0x28, 0x28,
0x28, 0x00, 0x00, 0x00, 0x10
db 0x00, 0x00, 0x10, 0x10, 0x00, 0x10, 0x10, 0x28, 0x00, 0x28, 0x00,
0x28, 0x28, 0x00, 0x28, 0x00
db 0x00, 0x10, 0x28, 0x00, 0x00, 0x10, 0x28, 0x28, 0x10, 0x00, 0x10,
0xFC, 0xFE, 0xE0, 0x1C, 0x00
db 0x70, 0x48, 0x10, 0x38, 0x38, 0x28, 0x48, 0x08, 0x54, 0x54, 0x48,
0x4C, 0x48, 0x44, 0x64, 0x28
db 0x40, 0x40, 0x48, 0x48, 0x40, 0x30, 0x00, 0x58, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x78, 0x00
db 0x00, 0x38, 0xC4, 0x10, 0x10, 0x38, 0x38, 0x00, 0xFC, 0x00, 0xFC,
0x20, 0x10, 0x30, 0x60, 0x54
db 0x60, 0x18, 0x10, 0x48, 0x14, 0x30, 0xFC, 0x00, 0x10, 0x10, 0x10,
0x10, 0xFC, 0x00, 0x00, 0x00
db 0x00, 0x10, 0x00, 0x28, 0x7C, 0x4C, 0x34, 0x00, 0x08, 0x20, 0x28,
0x10, 0x10, 0x00, 0x18, 0x40
db 0x38, 0x7C, 0x7C, 0x38, 0x08, 0x38, 0x38, 0x10, 0x38, 0x38, 0x10,
0x10, 0x08, 0x00, 0x20, 0x10
db 0x3C, 0x48, 0x70, 0x30, 0x70, 0x78, 0x40, 0x30, 0x48, 0x38, 0x30,
0x48, 0x78, 0x44, 0x48, 0x30
db 0x40, 0x28, 0x48, 0x30, 0x10, 0x30, 0x10, 0x28, 0x44, 0x10, 0x78,
0x1C, 0x04, 0x70, 0x00, 0x00
db 0x00, 0x3C, 0x70, 0x38, 0x38, 0x3C, 0x20, 0x08, 0x48, 0x38, 0x48,
0x24, 0x18, 0x54, 0x48, 0x30
db 0x40, 0x08, 0x40, 0x78, 0x18, 0x30, 0x10, 0x28, 0x44, 0x08, 0x78,
0x1C, 0x08, 0x70, 0x00, 0x78
db 0x48, 0x70, 0x70, 0x40, 0x7C, 0x78, 0x54, 0x30, 0x48, 0x48, 0x48,
0x48, 0x44, 0x48, 0x30, 0x48
db 0x40, 0x30, 0x10, 0x30, 0x10, 0x44, 0x7C, 0x08, 0x7C, 0x7C, 0x70,
0x74, 0x70, 0x70, 0x58, 0x48
db 0x3C, 0x38, 0x70, 0x40, 0xFC, 0x3C, 0x54, 0x38, 0x48, 0x48, 0x48,
0x48, 0x44, 0x48, 0x30, 0x48
db 0x88, 0xA8, 0xFC, 0x10, 0x10, 0x10, 0x28, 0x28, 0x10, 0x28, 0x28,
0x28, 0x00, 0x00, 0x00, 0x10
db 0x00, 0x00, 0x10, 0x10, 0x00, 0x10, 0x10, 0x28, 0x00, 0x28, 0x00,
0x28, 0x28, 0x00, 0x28, 0x00
db 0x00, 0x10, 0x28, 0x00, 0x00, 0x10, 0x28, 0x28, 0x10, 0x00, 0x10,
0xFC, 0xFE, 0xE0, 0x1C, 0x00
db 0x40, 0x30, 0x10, 0x08, 0x10, 0x44, 0x7C, 0x08, 0x7C, 0x7C, 0x70,
0x74, 0x70, 0x38, 0x58, 0x48
db 0x7C, 0x38, 0x10, 0x20, 0x40, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFC
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x40, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x20, 0x00, 0xA8, 0x10, 0x10, 0x10, 0x28, 0x28, 0x10, 0x28, 0x28,
0x28, 0x00, 0x00, 0x00, 0x10
db 0x00, 0x00, 0x10, 0x10, 0x00, 0x10, 0x10, 0x28, 0x00, 0x28, 0x00,
0x28, 0x28, 0x00, 0x28, 0x00
db 0x00, 0x10, 0x28, 0x00, 0x00, 0x10, 0x28, 0x28, 0x10, 0x00, 0x10,
0xFC, 0xFE, 0xE0, 0x1C, 0x00
db 0x40, 0x00, 0x00, 0x30, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x20, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00
From Kirill Frolov → To Kirill Frolov 18 July 2004
Press RESET immediately, Kirill Frolov!
On Sun, 18 Jul 2004 10:20:42 +0000 (UTC), Kirill Frolov wrote:
KF>> global _font42 ; 6-pixels wide monospace font
KF>> global _font64 ; 4-pixels wide monospace font
KF> Fonts (2):
; Font 64 characters per line. Format -- 1/3 of the screen file.
; Each familiar place contains two identical symbols (left and right)
; (for fast work it is recommended to place from an address that is a multiple of 0100h).
EXPORT global _font64 ; 4-pixel wide monospace font
; if $256
; ds 0-$256
; endif
psect adata; local, class=DATA , reloc=256
_font64:
; db "HEREFONTSTARTED!"
db 0x000, 0x066, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF,
0x0FF, 0x011, 0x07F, 0x0FF, 0x080, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x022,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x055, 0x0DD, 0x022, 0x022, 0x022, 0x055, 0x000, 0x000, 0x055,
0x055, 0x000, 0x055, 0x055, 0x022, 0x000
db 0x022, 0x022, 0x000, 0x022, 0x000, 0x022, 0x022, 0x055, 0x055, 0x000,
0x055, 0x000, 0x055, 0x000, 0x055, 0x022
db 0x055, 0x000, 0x000, 0x055, 0x022, 0x000, 0x000, 0x055, 0x022, 0x022,
0x000, 0x0FF, 0x000, 0x0CC, 0x033, 0x0FF
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x022, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x099, 0x000, 0x000, 0x066, 0x000, 0x077, 0x000, 0x000, 0x077,
0x077, 0x011, 0x000, 0x000, 0x077, 0x022
db 0x044, 0x011, 0x022, 0x055, 0x077, 0x033, 0x000, 0x022, 0x022, 0x022,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x022, 0x000, 0x000, 0x022, 0x055, 0x022, 0x022, 0x022, 0x044,
0x000, 0x000, 0x000, 0x000, 0x000, 0x011
db 0x077, 0x022, 0x077, 0x077, 0x011, 0x077, 0x077, 0x077, 0x077, 0x077,
0x000, 0x000, 0x000, 0x000, 0x000, 0x022
db 0x022, 0x022, 0x066, 0x033, 0x066, 0x077, 0x077, 0x022, 0x055, 0x077,
0x033, 0x055, 0x044, 0x055, 0x055, 0x022
db 0x066, 0x022, 0x066, 0x033, 0x077, 0x055, 0x055, 0x055, 0x055, 0x055,
0x077, 0x077, 0x044, 0x077, 0x022, 0x000
db 0x022, 0x000, 0x044, 0x000, 0x011, 0x000, 0x033, 0x000, 0x044, 0x022,
0x011, 0x044, 0x022, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x022, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x011, 0x022, 0x044, 0x055, 0x000
db 0x033, 0x077, 0x066, 0x077, 0x033, 0x077, 0x077, 0x066, 0x055, 0x000,
0x055, 0x011, 0x055, 0x055, 0x022, 0x077
db 0x066, 0x033, 0x077, 0x055, 0x022, 0x055, 0x055, 0x055, 0x055, 0x055,
0x0CC, 0x055, 0x044, 0x066, 0x0BB, 0x033
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x022,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x0AA, 0x0AA, 0x077, 0x022, 0x022, 0x022, 0x055, 0x000, 0x000, 0x055,
0x055, 0x000, 0x055, 0x055, 0x022, 0x000
db 0x022, 0x022, 0x000, 0x022, 0x000, 0x022, 0x022, 0x055, 0x055, 0x000,
0x055, 0x000, 0x055, 0x000, 0x055, 0x022
db 0x055, 0x000, 0x000, 0x055, 0x022, 0x000, 0x000, 0x055, 0x022, 0x022,
0x000, 0x0FF, 0x000, 0x0CC, 0x033, 0x0FF
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x044, 0x011, 0x022, 0x022, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x066, 0x066, 0x000, 0x000
db 0x000, 0x0FF, 0x022, 0x066, 0x022, 0x055, 0x044, 0x066, 0x066, 0x055,
0x055, 0x022, 0x055, 0x05D, 0x0F7, 0x077
db 0x066, 0x033, 0x077, 0x055, 0x0DD, 0x044, 0x000, 0x077, 0x077, 0x022,
0x044, 0x011, 0x000, 0x000, 0x022, 0x077
db 0x000, 0x022, 0x055, 0x055, 0x077, 0x011, 0x055, 0x044, 0x044, 0x022,
0x055, 0x022, 0x000, 0x000, 0x000, 0x011
db 0x055, 0x066, 0x011, 0x011, 0x033, 0x044, 0x044, 0x011, 0x055, 0x055,
0x000, 0x000, 0x011, 0x000, 0x044, 0x055
db 0x055, 0x055, 0x055, 0x044, 0x055, 0x044, 0x044, 0x055, 0x055, 0x022,
0x011, 0x055, 0x044, 0x077, 0x055, 0x055
db 0x055, 0x055, 0x055, 0x044, 0x022, 0x055, 0x055, 0x077, 0x055, 0x055,
0x011, 0x044, 0x044, 0x011, 0x055, 0x000
db 0x022, 0x022, 0x044, 0x033, 0x011, 0x022, 0x022, 0x022, 0x044, 0x000,
0x000, 0x044, 0x022, 0x055, 0x066, 0x022
db 0x066, 0x033, 0x055, 0x033, 0x077, 0x055, 0x055, 0x055, 0x055, 0x055,
0x077, 0x022, 0x022, 0x022, 0x0AA, 0x000
db 0x055, 0x044, 0x055, 0x044, 0x033, 0x044, 0x077, 0x011, 0x055, 0x055,
0x055, 0x033, 0x077, 0x055, 0x055, 0x055
db 0x055, 0x044, 0x022, 0x055, 0x077, 0x055, 0x055, 0x055, 0x077, 0x077,
0x044, 0x055, 0x044, 0x011, 0x0BB, 0x055
db 0x033, 0x077, 0x066, 0x077, 0x033, 0x022, 0x077, 0x066, 0x055, 0x000,
0x055, 0x011, 0x055, 0x055, 0x022, 0x077
db 0x000, 0x055, 0x0EE, 0x022, 0x022, 0x022, 0x055, 0x000, 0x000, 0x055,
0x055, 0x000, 0x055, 0x055, 0x022, 0x000
db 0x022, 0x022, 0x000, 0x022, 0x000, 0x022, 0x022, 0x055, 0x055, 0x000,
0x055, 0x000, 0x055, 0x000, 0x055, 0x022
db 0x055, 0x000, 0x000, 0x055, 0x022, 0x000, 0x000, 0x055, 0x022, 0x022,
0x000, 0x0FF, 0x000, 0x0CC, 0x033, 0x0FF
db 0x066, 0x033, 0x077, 0x055, 0x022, 0x055, 0x055, 0x055, 0x055, 0x055,
0x066, 0x055, 0x044, 0x066, 0x0BB, 0x033
db 0x077, 0x022, 0x022, 0x022, 0x055, 0x022, 0x022, 0x0AA, 0x022, 0x000,
0x000, 0x000, 0x055, 0x022, 0x000, 0x000
db 0x000, 0x099, 0x066, 0x022, 0x066, 0x055, 0x077, 0x044, 0x022, 0x077,
0x077, 0x022, 0x055, 0x04C, 0x0D5, 0x077
db 0x077, 0x077, 0x022, 0x055, 0x0DD, 0x022, 0x000, 0x022, 0x022, 0x022,
0x022, 0x022, 0x000, 0x066, 0x022, 0x077
db 0x000, 0x022, 0x055, 0x077, 0x044, 0x033, 0x022, 0x000, 0x044, 0x022,
0x022, 0x022, 0x000, 0x000, 0x000, 0x022
db 0x055, 0x022, 0x077, 0x033, 0x055, 0x077, 0x077, 0x011, 0x022, 0x055,
0x022, 0x022, 0x022, 0x077, 0x022, 0x011
db 0x077, 0x055, 0x066, 0x044, 0x055, 0x066, 0x066, 0x044, 0x077, 0x022,
0x011, 0x077, 0x044, 0x077, 0x055, 0x055
db 0x055, 0x055, 0x055, 0x022, 0x022, 0x055, 0x055, 0x077, 0x022, 0x055,
0x022, 0x044, 0x022, 0x011, 0x000, 0x000
db 0x011, 0x011, 0x066, 0x044, 0x033, 0x055, 0x077, 0x055, 0x066, 0x066,
0x033, 0x055, 0x022, 0x077, 0x055, 0x055
db 0x055, 0x055, 0x066, 0x044, 0x022, 0x055, 0x055, 0x077, 0x055, 0x055,
0x011, 0x044, 0x000, 0x011, 0x000, 0x022
db 0x055, 0x066, 0x066, 0x044, 0x033, 0x077, 0x022, 0x022, 0x055, 0x055,
0x066, 0x055, 0x077, 0x077, 0x055, 0x055
db 0x055, 0x044, 0x022, 0x055, 0x077, 0x022, 0x055, 0x055, 0x077, 0x077,
0x066, 0x044, 0x066, 0x033, 0x0FF, 0x055
db 0x011, 0x044, 0x055, 0x044, 0x033, 0x055, 0x077, 0x011, 0x055, 0x055,
0x055, 0x033, 0x077, 0x055, 0x055, 0x055
db 0x055, 0x0AA, 0x0BB, 0x022, 0x022, 0x0EE, 0x055, 0x000, 0x0EE, 0x0DD,
0x055, 0x0FF, 0x0DD, 0x055, 0x0EE, 0x000
db 0x022, 0x022, 0x000, 0x022, 0x000, 0x022, 0x033, 0x055, 0x055, 0x077,
0x0DD, 0x0FF, 0x055, 0x0FF, 0x0DD, 0x0FF
db 0x055, 0x0FF, 0x000, 0x055, 0x033, 0x033, 0x000, 0x055, 0x0FF, 0x022,
0x000, 0x0FF, 0x000, 0x0CC, 0x033, 0x0FF
db 0x055, 0x044, 0x022, 0x055, 0x077, 0x055, 0x055, 0x055, 0x077, 0x077,
0x022, 0x044, 0x044, 0x011, 0x0BB, 0x055
db 0x000, 0x077, 0x011, 0x044, 0x044, 0x022, 0x000, 0x055, 0x055, 0x066,
0x022, 0x011, 0x055, 0x044, 0x077, 0x000
db 0x000, 0x099, 0x022, 0x044, 0x022, 0x077, 0x011, 0x066, 0x022, 0x055,
0x011, 0x077, 0x055, 0x055, 0x055, 0x055
db 0x077, 0x077, 0x022, 0x055, 0x055, 0x055, 0x000, 0x022, 0x022, 0x022,
0x077, 0x077, 0x044, 0x0FF, 0x077, 0x022
db 0x000, 0x022, 0x000, 0x055, 0x077, 0x066, 0x055, 0x000, 0x044, 0x022,
0x077, 0x077, 0x000, 0x077, 0x000, 0x022
db 0x055, 0x022, 0x044, 0x011, 0x055, 0x011, 0x055, 0x022, 0x055, 0x077,
0x000, 0x000, 0x044, 0x000, 0x011, 0x022
db 0x077, 0x077, 0x055, 0x044, 0x055, 0x044, 0x044, 0x077, 0x055, 0x022,
0x011, 0x066, 0x044, 0x077, 0x077, 0x055
db 0x066, 0x077, 0x066, 0x011, 0x022, 0x055, 0x055, 0x077, 0x022, 0x022,
0x022, 0x044, 0x022, 0x011, 0x000, 0x000
db 0x000, 0x033, 0x055, 0x044, 0x055, 0x066, 0x022, 0x055, 0x055, 0x022,
0x011, 0x055, 0x022, 0x077, 0x055, 0x055
db 0x055, 0x055, 0x044, 0x022, 0x022, 0x055, 0x055, 0x077, 0x022, 0x033,
0x022, 0x022, 0x000, 0x022, 0x000, 0x055
db 0x077, 0x055, 0x055, 0x044, 0x033, 0x044, 0x077, 0x011, 0x077, 0x077,
0x055, 0x055, 0x077, 0x055, 0x055, 0x055
db 0x066, 0x044, 0x022, 0x033, 0x077, 0x055, 0x055, 0x077, 0x077, 0x077,
0x055, 0x077, 0x055, 0x011, 0x0FF, 0x033
db 0x033, 0x077, 0x066, 0x044, 0x033, 0x077, 0x022, 0x022, 0x077, 0x077,
0x066, 0x055, 0x077, 0x077, 0x055, 0x055
db 0x000, 0x055, 0x0DD, 0x022, 0x0EE, 0x022, 0x055, 0x0FF, 0x022, 0x011,
0x055, 0x011, 0x011, 0x0FF, 0x022, 0x0EE
db 0x033, 0x0FF, 0x0FF, 0x033, 0x0FF, 0x0FF, 0x022, 0x055, 0x044, 0x044,
0x000, 0x000, 0x044, 0x000, 0x000, 0x000
db 0x0FF, 0x000, 0x0FF, 0x077, 0x022, 0x022, 0x077, 0x0FF, 0x022, 0x0EE,
0x033, 0x0FF, 0x0FF, 0x0CC, 0x033, 0x000
db 0x055, 0x044, 0x022, 0x033, 0x077, 0x022, 0x055, 0x077, 0x077, 0x077,
0x033, 0x077, 0x066, 0x033, 0x0FF, 0x055
db 0x077, 0x022, 0x022, 0x022, 0x044, 0x022, 0x077, 0x000, 0x022, 0x066,
0x000, 0x0AA, 0x055, 0x066, 0x077, 0x000
db 0x000, 0x066, 0x022, 0x066, 0x066, 0x011, 0x077, 0x066, 0x022, 0x077,
0x077, 0x055, 0x055, 0x05D, 0x0D5, 0x077
db 0x066, 0x033, 0x022, 0x055, 0x055, 0x022, 0x000, 0x077, 0x022, 0x022,
0x022, 0x022, 0x077, 0x066, 0x077, 0x022
db 0x000, 0x000, 0x000, 0x077, 0x011, 0x044, 0x066, 0x000, 0x044, 0x022,
0x022, 0x022, 0x022, 0x000, 0x066, 0x044
db 0x055, 0x022, 0x044, 0x011, 0x077, 0x011, 0x055, 0x044, 0x055, 0x011,
0x000, 0x022, 0x022, 0x077, 0x022, 0x000
db 0x044, 0x055, 0x055, 0x044, 0x055, 0x044, 0x044, 0x055, 0x055, 0x022,
0x055, 0x055, 0x044, 0x055, 0x077, 0x055
db 0x044, 0x066, 0x055, 0x055, 0x022, 0x055, 0x055, 0x077, 0x055, 0x022,
0x044, 0x044, 0x011, 0x011, 0x000, 0x000
db 0x000, 0x055, 0x055, 0x044, 0x055, 0x044, 0x022, 0x022, 0x055, 0x022,
0x011, 0x066, 0x022, 0x055, 0x055, 0x055
db 0x066, 0x033, 0x044, 0x011, 0x022, 0x055, 0x055, 0x077, 0x055, 0x011,
0x044, 0x022, 0x022, 0x022, 0x000, 0x055
db 0x055, 0x055, 0x055, 0x044, 0x033, 0x044, 0x077, 0x011, 0x077, 0x077,
0x055, 0x055, 0x055, 0x055, 0x055, 0x055
db 0x044, 0x044, 0x022, 0x011, 0x022, 0x055, 0x055, 0x011, 0x077, 0x077,
0x055, 0x055, 0x055, 0x011, 0x0BB, 0x055
db 0x055, 0x055, 0x055, 0x044, 0x033, 0x044, 0x077, 0x011, 0x077, 0x077,
0x055, 0x055, 0x055, 0x055, 0x055, 0x055
db 0x0AA, 0x0AA, 0x077, 0x022, 0x022, 0x0EE, 0x055, 0x055, 0x0EE, 0x0DD,
0x055, 0x0DD, 0x0FF, 0x000, 0x0EE, 0x022
db 0x000, 0x000, 0x022, 0x022, 0x000, 0x022, 0x033, 0x055, 0x077, 0x055,
0x0FF, 0x0DD, 0x055, 0x0FF, 0x0DD, 0x0FF
db 0x000, 0x0FF, 0x055, 0x000, 0x033, 0x033, 0x055, 0x055, 0x0FF, 0x000,
0x022, 0x0FF, 0x0FF, 0x0CC, 0x033, 0x000
db 0x066, 0x044, 0x022, 0x011, 0x077, 0x055, 0x055, 0x011, 0x077, 0x077,
0x033, 0x055, 0x055, 0x011, 0x0BB, 0x033
db 0x000, 0x000, 0x055, 0x055, 0x044, 0x022, 0x000, 0x0AA, 0x000, 0x000,
0x000, 0x044, 0x000, 0x000, 0x077, 0x000
db 0x000, 0x099, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x055, 0x000, 0x000, 0x019, 0x077
db 0x044, 0x011, 0x077, 0x000, 0x055, 0x011, 0x077, 0x022, 0x022, 0x077,
0x044, 0x011, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x022, 0x000, 0x055, 0x077, 0x055, 0x033, 0x000, 0x022, 0x044,
0x055, 0x022, 0x022, 0x000, 0x066, 0x044
db 0x077, 0x077, 0x077, 0x077, 0x011, 0x077, 0x077, 0x044, 0x077, 0x077,
0x022, 0x022, 0x011, 0x000, 0x044, 0x022
db 0x022, 0x055, 0x066, 0x033, 0x066, 0x077, 0x044, 0x022, 0x055, 0x077,
0x022, 0x055, 0x077, 0x055, 0x055, 0x022
db 0x044, 0x033, 0x055, 0x022, 0x022, 0x033, 0x022, 0x022, 0x055, 0x022,
0x077, 0x077, 0x011, 0x077, 0x000, 0x000
db 0x000, 0x033, 0x066, 0x033, 0x033, 0x033, 0x022, 0x011, 0x055, 0x077,
0x055, 0x055, 0x011, 0x055, 0x055, 0x022
db 0x044, 0x011, 0x044, 0x066, 0x011, 0x033, 0x022, 0x022, 0x055, 0x066,
0x077, 0x011, 0x022, 0x044, 0x000, 0x077
db 0x055, 0x077, 0x077, 0x044, 0x077, 0x077, 0x077, 0x066, 0x055, 0x055,
0x055, 0x055, 0x055, 0x055, 0x022, 0x055
db 0x044, 0x033, 0x022, 0x066, 0x022, 0x055, 0x077, 0x011, 0x077, 0x077,
0x066, 0x077, 0x066, 0x066, 0x0BB, 0x055
db 0x077, 0x077, 0x077, 0x044, 0x077, 0x033, 0x077, 0x066, 0x055, 0x055,
0x055, 0x055, 0x055, 0x055, 0x022, 0x055
db 0x000, 0x055, 0x0EE, 0x022, 0x022, 0x022, 0x055, 0x055, 0x022, 0x055,
0x055, 0x055, 0x000, 0x000, 0x000, 0x022
db 0x000, 0x000, 0x022, 0x022, 0x000, 0x022, 0x022, 0x055, 0x000, 0x055,
0x000, 0x055, 0x055, 0x000, 0x055, 0x000
db 0x000, 0x022, 0x055, 0x000, 0x000, 0x022, 0x055, 0x055, 0x022, 0x000,
0x022, 0x0FF, 0x0FF, 0x0CC, 0x033, 0x000
db 0x044, 0x033, 0x022, 0x066, 0x022, 0x055, 0x077, 0x011, 0x077, 0x077,
0x033, 0x077, 0x066, 0x066, 0x0BB, 0x055
db 0x077, 0x077, 0x022, 0x022, 0x044, 0x0AA, 0x022, 0x055, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x066, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF,
0x0FF, 0x077, 0x07F, 0x0FF, 0x0A2, 0x022
db 0x000, 0x000, 0x022, 0x055, 0x055, 0x066, 0x077, 0x077, 0x022, 0x022,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x022, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x044, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x044, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x0FF
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x066, 0x000, 0x000,
0x022, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x044, 0x011, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x011, 0x000, 0x000, 0x011,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x055, 0x0AA, 0x0BB, 0x022, 0x022, 0x022, 0x055, 0x055, 0x022, 0x055,
0x055, 0x055, 0x000, 0x000, 0x000, 0x022
db 0x000, 0x000, 0x022, 0x022, 0x000, 0x022, 0x022, 0x055, 0x000, 0x055,
0x000, 0x055, 0x055, 0x000, 0x055, 0x000
db 0x000, 0x022, 0x055, 0x000, 0x000, 0x022, 0x055, 0x055, 0x022, 0x000,
0x022, 0x0FF, 0x0FF, 0x0CC, 0x033, 0x000
db 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x011, 0x000, 0x000, 0x011,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000
db 0x000, 0x000, 0x044, 0x011, 0x044, 0x044, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000