A2osX/DRV/DHGR.DRV.S.OSD.txt
burniouf 6adfe9fdda A2osX 0.95 :
- NEW A2OSX.BUILD media, old one corrupted by ProDOS.FX bug
 - most of BIN/SBIN/LIBS reASMed with .95 API
2023-11-12 22:12:24 +01:00

801 lines
24 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*--------------------------------------
ZPCmdPtr .EQ ZPDRV
ZPDstBMPtr .EQ ZPDRV+2
ZPFontPtr .EQ ZPDRV+4
ZPTablePtr .EQ ZPDRV+6
ZPCharPtr .EQ ZPDRV+8
ZPSrcBMPtr .EQ ZPDRV+10
ZPTmpPtr .EQ ZPDRV+14
ColIndex .EQ ZPDRV+16
GBYTE .EQ ZPDRV+17
GBYTE2 .EQ ZPDRV+18
GWORD .EQ ZPDRV+20
*--------------------------------------
TXTPTR .EQ $B8
*--------------------------------------
* Y,A = Ptr to S.CB in MAIN
*--------------------------------------
X.OSD ldy CBX.Cache+S.CB.DstPtr
lda CBX.Cache+S.CB.DstPtr+1
bne .1 Ptr To Aux
tya hBM in Aux
beq .4 no Src BM
>SYSCALL2 GetMemPtr
.1 >STYA ZPDstBMPtr
ldx #0
.2 lda (ZPDstBMPtr)
sta DstBM.Cache,x
inc ZPDstBMPtr
bne .3
inc ZPDstBMPtr+1
.3 inx
cpx #S.BM
bne .2
.4 ldx CBX.Cache+S.CB.CMD
jmp (.8-2,x)
*--------------------------------------
.8 .DA OSD.SETPIXEL
.DA OSD.GETPIXEL
.DA OSD.HLINE
.DA OSD.VLINE
.DA OSD.FILLRECT
.DA OSD.BITBLT
.DA OSD.GETRECTBUFSIZE
.DA OSD.DRAWTEXT
.DA OSD.GETTEXTSIZE
*--------------------------------------
OSD.SETPIXEL >LDYA CBX.Cache+S.CB.Y1
ldx DstBM.Cache+S.BM.RowBytes
jsr OSD.YAMultX
pha
tya
clc
adc ZPDstBMPtr
sta ZPDstBMPtr
pla
adc ZPDstBMPtr+1
sta ZPDstBMPtr+1
lda CBX.Cache+S.CB.M
bit #S.CB.M.C16
bne OSD.SETPIXEL.C16
OSD.SETPIXEL.M lda CBX.Cache+S.CB.X1
pha
and #$7 MOD 7
tax
pla
lsr CBX.Cache+S.CB.X1
ror
lsr CBX.Cache+S.CB.X1
ror
lsr CBX.Cache+S.CB.X1
ror
clc
adc ZPDstBMPtr
sta ZPDstBMPtr
lda CBX.Cache+S.CB.X1
adc ZPDstBMPtr+1
sta ZPDstBMPtr+1
lda CBX.Cache+S.CB.OP
* cmp #S.CB.OP.XOR
beq .2
lda CBX.Cache+S.CB.COLOR
bne .1
lda (ZPDstBMPtr)
and Mono8.NMasks,x
sta (ZPDstBMPtr)
rts
.1 lda (ZPDstBMPtr)
ora Mono8.Masks,x
sta (ZPDstBMPtr)
rts
.2 lda (ZPDstBMPtr)
eor Mono8.Masks,x
sta (ZPDstBMPtr)
rts
OSD.SETPIXEL.C16
*--------------------------------------
OSD.GETPIXEL
*--------------------------------------
OSD.HLINE
*--------------------------------------
OSD.VLINE
*--------------------------------------
OSD.FILLRECT
*--------------------------------------
* BitBlt
* S.CB.X1 : SrcX1 in bitmap/mask
* S.CB.Y1 : SrcY1
* S.CB.SrcW : width
* S.CB.SrcH : height
* S.CB.DstX : Destination X (screen)
* S.CB.DstY : Destination Y (screen)
* S.CB.SrcPtr : pointer to S.BM
* S.CB.SrcPtr+1 = 0, hMem in S.CB.SrcPtr
* S.CB.DstPtr : pointer to Save Buffer
*--------------------------------------
OSD.BITBLT >LDYA CBX.Cache+S.CB.SrcPtr
bne OSD.BITBLT.1
tya
>SYSCALL2 GetMemPtr
OSD.BITBLT.1 >STYA ZPSrcBMPtr
*--------------------------------------
* GETRECTBUFSIZE
* In:
* S.CB.SrcW
* S.CB.SrcH
* Out:
* S.CB.DstPtr : Buffer Size (in bytes)
*--------------------------------------
OSD.GETRECTBUFSIZE
OSD.GETRECTBUFSIZE.RTS
rts
*--------------------------------------
* DRAWTEXT
* In:
* S.CB.S.CB.FONT : hFont
* S.CB.SrcPtr : Ptr to Text
* Out:
* A=hBM
*--------------------------------------
OSD.DRAWTEXT sec
.HS 90 BCC
*--------------------------------------
* GETTEXTSIZE
* In:
* S.CB.S.CB.FONT : hFont
* S.CB.SrcPtr : Ptr to Text
* Out:
* S.CB.SrcW = Width
* S.CB.SrcH = Height
*--------------------------------------
OSD.GETTEXTSIZE clc
php
lda CBX.Cache+S.CB.hFont
>SYSCALL2 GetMemPtr
>STYA ZPFontPtr
ldy #S.FON-1
.1 lda (ZPFontPtr),y
sta FON.Cache,y
dey
bpl .1
lda ZPFontPtr
clc
adc #S.FON
sta ZPTablePtr
lda ZPFontPtr+1
adc /S.FON
sta ZPTablePtr+1
.2 >LDYA CBX.Cache+S.CB.TxtPtr
>STYA TXTPTR
stz CBX.Cache+S.CB.SrcW
stz CBX.Cache+S.CB.SrcW+1
lda FON.Cache+S.FON.PixH
sta CBX.Cache+S.CB.SrcH
stz CBX.Cache+S.CB.SrcH+1
.3 jsr OSD.TXTPTRgn
beq .4
jsr OSD.FON.GetChar
lda (ZPCharPtr) Get Char PixelW
sec
adc CBX.Cache+S.CB.SrcW
sta CBX.Cache+S.CB.SrcW
bcc .3
inc CBX.Cache+S.CB.SrcW+1
bra .3
.4 plp
bcs .5
jmp CB.Update
.5 lda CBX.Cache+S.CB.SrcW
ldx CBX.Cache+S.CB.SrcW+1
ldy CBX.Cache+S.CB.SrcH
sta DstBM.Cache+S.BM.W
stx DstBM.Cache+S.BM.W+1
sty DstBM.Cache+S.BM.H
stz DstBM.Cache+S.BM.H+1
lda #S.BM.F.BBP1
sta DstBM.Cache+S.BM.F
jsr OSD.BM.Create
bcs OSD.GETRECTBUFSIZE.RTS
sta OSD.DRAWTEXT.END+1 save hBM, ZPDstBMPtr=BMData
>LDYA CBX.Cache+S.CB.TxtPtr
>STYA TXTPTR
stz GWORD reset Col index in BM
stz GWORD+1 reset Bit index in Col
OSD.DRAWTEXT.LOOP
jsr OSD.TXTPTRgn
beq OSD.DRAWTEXT.END
jsr OSD.FON.GetChar
lda (ZPCharPtr) Char PixW
sta GBYTE
jsr OSD.CHAR.GetNext Char ByteW
sta GBYTE2
>LDYA ZPDstBMPtr
>STYA ZPTmpPtr
lda GWORD+1 Get Bit Index for shifting
jsr OSD.DRAWTEXT.JMP
lda GBYTE Get Char PixW
sec +1 for char spacing
adc GWORD+1 Add Bit index in Col
pha
and #7 mod 8
sta GWORD+1 Update Bit index in Col
pla
lsr
lsr
lsr div 8
clc
adc GWORD Update Col Index in BM
sta GWORD
bra OSD.DRAWTEXT.LOOP
OSD.DRAWTEXT.END
lda #$FF SELF MODIFIED
sta CBX.Cache+S.CB.SrcPtr Save hBM in Src CB
stz CBX.Cache+S.CB.SrcPtr+1
lda #S.CB.CMD.BITBLT
sta CBX.Cache+S.CB.CMD
jmp CB.Update
*--------------------------------------
OSD.DRAWTEXT.JMP
asl
tax
jmp (.1,x)
.1 .DA OSD.DRAWTEXT.SHIFT0
.DA OSD.DRAWTEXT.SHIFT1
.DA OSD.DRAWTEXT.SHIFT26
.DA OSD.DRAWTEXT.SHIFT26
.DA OSD.DRAWTEXT.SHIFT26
.DA OSD.DRAWTEXT.SHIFT26
.DA OSD.DRAWTEXT.SHIFT26
.DA OSD.DRAWTEXT.SHIFT7
*--------------------------------------
OSD.DRAWTEXT.SHIFT0
lda FON.Cache+S.FON.PixH
.6 pha save Height counter
ldx GBYTE2 init Width counter
ldy GWORD get col index in BM
.7 jsr OSD.CHAR.GetNext
eor (ZPTmpPtr),y
sta (ZPTmpPtr),y
iny
dex
bne .7
lda ZPTmpPtr
clc
adc DstBM.Cache+S.BM.RowBytes
sta ZPTmpPtr
bcc .10
inc ZPTmpPtr+1
.10 pla get back Height counter
dec
bne .6
rts
*--------------------------------------
OSD.DRAWTEXT.SHIFT1
lda FON.Cache+S.FON.PixH
.1 pha save Height counter
ldx GBYTE2 init Width counter
ldy GWORD get col index in BM
.2 jsr OSD.CHAR.GetNext
asl 8th bit in ->carry
eor (ZPTmpPtr),y
sta (ZPTmpPtr),y
iny
bcc .3
lda #1
eor (ZPTmpPtr),y
sta (ZPTmpPtr),y
.3 dex
bne .2
lda ZPTmpPtr Next line...
clc
adc DstBM.Cache+S.BM.RowBytes
sta ZPTmpPtr
bcc .4
inc ZPTmpPtr+1
.4 pla get back Height counter
dec
bne .1
rts
*--------------------------------------
* X = ShiftL x2 (Range 4..10)
*--------------------------------------
OSD.DRAWTEXT.SHIFT26
lda SHIFT8.L-4,x
sta .3+1
lda SHIFT8.L-3,x
sta .3+2
lda SHIFT8.L-2,x
sta .4+1
lda SHIFT8.L-1,x
sta .4+2
ldx GWORD+1 ShiftL Index
lda FON.Cache+S.FON.PixH
.1 pha save Height counter
lda GWORD
sta ColIndex
lda GBYTE2
.2 pha save Width counter
jsr OSD.CHAR.GetNext
pha
and First.Masks,x x = 2->6, for X=3 : A=000xxxxx
tay Range 0..127
.3 lda $FFFF,y SELF MODIFIED ShiftL3 A=xxxxx000
ldy ColIndex get col index in BM
eor (ZPTmpPtr),y
sta (ZPTmpPtr),y
inc ColIndex
pla
and Last.Masks,x x = 2->6, for X=3 : A=xxx00000
lsr Range 0..127 !! A=0xxx0000
tay but SHIFTL(X+1) A=00000xxx
.4 lda $FFFF,y SELF MODIFIED
ldy ColIndex get col index in BM
eor (ZPTmpPtr),y
sta (ZPTmpPtr),y
pla get back Witdh counter
dec
bne .2
lda ZPTmpPtr
clc
adc DstBM.Cache+S.BM.RowBytes
sta ZPTmpPtr
bcc .5
inc ZPTmpPtr+1
.5 pla get back Height counter
dec
bne .1
rts
*--------------------------------------
OSD.DRAWTEXT.SHIFT7
lda FON.Cache+S.FON.PixH
.1 pha save Height counter
ldx GBYTE2 init Width counter
ldy GWORD get col index in BM
.2 jsr OSD.CHAR.GetNext
lsr 1st bit in carry, for COL 1
bcc .3
pha Other 7 bits for COL 2
lda #$80
eor (ZPTmpPtr),y
sta (ZPTmpPtr),y
pla get back bit 1->8 already shifted Left 7 (= Shift right 1)
.3 iny
eor (ZPTmpPtr),y
sta (ZPTmpPtr),y
dex
bne .2
lda ZPTmpPtr
clc
adc DstBM.Cache+S.BM.RowBytes
sta ZPTmpPtr
bcc .4
inc ZPTmpPtr+1
.4 pla get back Height counter
dec
bne .1
rts
*--------------------------------------
OSD.CHAR.GetNext
inc ZPCharPtr
bne .8
inc ZPCharPtr+1
.8 lda (ZPCharPtr)
rts
*--------------------------------------
OSD.FON.GetChar cmp FON.Cache+S.FON.Last
bcc .1
bne .2
.1 sec
sbc FON.Cache+S.FON.First
bcs .3
.2 lda FON.Cache+S.FON.Default
.3 asl
php
clc
adc ZPTablePtr
sta ZPCharPtr
lda #0
adc ZPTablePtr+1
sta ZPCharPtr+1
plp
bcc .4
inc ZPCharPtr+1
.4 lda (ZPCharPtr)
clc
adc ZPFontPtr
pha
ldy #1
lda (ZPCharPtr),y
adc ZPFontPtr+1
sta ZPCharPtr+1
pla
sta ZPCharPtr
rts
*--------------------------------------
OSD.BM.Create lda DstBM.Cache+S.BM.W
ldx DstBM.Cache+S.BM.W+1
bit #7
beq .1
and #$F8
clc
adc #8
bcc .1
inx
.1 sta DstBM.Cache+S.BM.RowBytes
txa
lsr
ror DstBM.Cache+S.BM.RowBytes
lsr
ror DstBM.Cache+S.BM.RowBytes
lsr
ror DstBM.Cache+S.BM.RowBytes
>LDYA DstBM.Cache+S.BM.H
ldx DstBM.Cache+S.BM.RowBytes
jsr OSD.YAMultX Compute BM total bytes
pha
eor #$ff
sta ZPTmpPtr+1
tya
eor #$ff
sta ZPTmpPtr
tya
clc
adc #S.BM
tay
pla
adc /S.BM
>SYSCALL2 GetMem
bcs .9
>STYA ZPDstBMPtr
ldy #S.BM-1
.2 lda DstBM.Cache,y
sta (ZPDstBMPtr),y
dey
bpl .2
lda ZPDstBMPtr
* clc
adc #S.BM
sta ZPDstBMPtr
sta .4+1
lda ZPDstBMPtr+1
adc /S.BM
sta ZPDstBMPtr+1
sta .4+2
ldy #0
lda CBX.Cache+S.CB.OP
and #S.CB.OP.INVERSE
beq .3
lda #$ff
.3 inc ZPTmpPtr
bne .4
inc ZPTmpPtr+1
beq .8
.4 sta $ffff,y
iny
bne .3
inc .4+2
bra .3
.8 txa hBM
clc
.9 rts
*--------------------------------------
* IN:
* Y,A = num1 (16)
* X = num2 (8)
* OUT:
* Y,A = (Y,A) * X
*--------------------------------------
OSD.YAMultX stx GBYTE
sty GWORD
sta GWORD+1
ldy #0 Result LO
tya Result HI
bra .3
.1 pha
tya
clc
adc GWORD
tay
pla
adc GWORD+1
.2 asl GWORD
rol GWORD+1
.3 lsr GBYTE
bcs .1
bne .2
rts
*--------------------------------------
CB.Update sta IO.CLRWRITEAUX
lda CBX.Cache
lsr
tax
ldy CBX.CmdLen-1,x
.1 lda CBX.Cache,y
sta (ZPCmdPtr),y
dey
bpl .1
sta IO.SETWRITEAUX
clc
rts
*--------------------------------------
OSD.TXTPTRgn jmp ($a000)
*--------------------------------------
CBX.CmdLen .DA #S.CB.Y1+1 SETPIXEL
.DA #S.CB.Y1+1 GETPIXEL
.DA #S.CB.X2+1 HLINE
.DA #S.CB.Y2+1 VLINE
.DA #S.CB.Y2+1 FILLRECT
.DA #S.CB.DstPtr+1 BITBLT
.DA #S.CB.DstPtr+1 GETRECTBUFSIZE
.DA #S.CB.TxtPtr+1 DRAWTEXT
.DA #S.CB.TxtPtr+1 GETTEXTSIZE
*--------------------------------------
CBX.Cache .BS S.CB
FON.Cache .BS S.FON
SrcBM.Cache .BS S.BM
DstBM.Cache .BS S.BM
*--------------------------------------
Mono8.NMasks .DA #%11111110
.DA #%11111101
.DA #%11111011
.DA #%11110111
.DA #%11101111
.DA #%11011111
.DA #%10111111
.DA #%01111111
*--------------------------------------
Mono8.Masks .DA #%00000001
.DA #%00000010
.DA #%00000100
.DA #%00001000
.DA #%00010000
.DA #%00100000
.DA #%01000000
.DA #%10000000
*--------------------------------------
First.Masks .DA #%11111111 Useless
.DA #%01111111
.DA #%00111111
.DA #%00011111
.DA #%00001111
.DA #%00000111
.DA #%00000011
.DA #%00000001
*--------------------------------------
Last.Masks .DA #%00000000 Useless
.DA #%10000000
.DA #%11000000
.DA #%11100000
.DA #%11110000
.DA #%11111000
.DA #%11111100
.DA #%11111110
*--------------------------------------
SHIFT8.L .DA SHIFT8.L2
.DA SHIFT8.L3
.DA SHIFT8.L4
.DA SHIFT8.L5
.DA SHIFT8.L6
.DA SHIFT8.L7
*--------------------------------------
*SHIFT8.LL .DA #SHIFT8.L1
* .DA #SHIFT8.L2
* .DA #SHIFT8.L3
* .DA #SHIFT8.L4
* .DA #SHIFT8.L5
* .DA #SHIFT8.L6
* .DA #SHIFT8.L7
*SHIFT8.LH .DA /SHIFT8.L1
* .DA /SHIFT8.L2
* .DA /SHIFT8.L3
* .DA /SHIFT8.L4
* .DA /SHIFT8.L5
* .DA /SHIFT8.L6
* .DA /SHIFT8.L7
*--------------------------------------
*SHIFT8.L1 .DA #%00000000,#%00000010,#%00000100,#%00000110,#%00001000,#%00001010,#%00001100,#%00001110
* .DA #%00010000,#%00010010,#%00010100,#%00010110,#%00011000,#%00011010,#%00011100,#%00011110
* .DA #%00100000,#%00100010,#%00100100,#%00100110,#%00101000,#%00101010,#%00101100,#%00101110
* .DA #%00110000,#%00110010,#%00110100,#%00110110,#%00111000,#%00111010,#%00111100,#%00111110
* .DA #%01000000,#%01000010,#%01000100,#%01000110,#%01001000,#%01001010,#%01001100,#%01001110
* .DA #%01010000,#%01010010,#%01010100,#%01010110,#%01011000,#%01011010,#%01011100,#%01011110
* .DA #%01100000,#%01100010,#%01100100,#%01100110,#%01101000,#%01101010,#%01101100,#%01101110
* .DA #%01110000,#%01110010,#%01110100,#%01110110,#%01111000,#%01111010,#%01111100,#%01111110
* .DA #%10000000,#%10000010,#%10000100,#%10000110,#%10001000,#%10001010,#%10001100,#%10001110
* .DA #%10010000,#%10010010,#%10010100,#%10010110,#%10011000,#%10011010,#%10011100,#%10011110
* .DA #%10100000,#%10100010,#%10100100,#%10100110,#%10101000,#%10101010,#%10101100,#%10101110
* .DA #%10110000,#%10110010,#%10110100,#%10110110,#%10111000,#%10111010,#%10111100,#%10111110
* .DA #%11000000,#%11000010,#%11000100,#%11000110,#%11001000,#%11001010,#%11001100,#%11001110
* .DA #%11010000,#%11010010,#%11010100,#%11010110,#%11011000,#%11011010,#%11011100,#%11011110
* .DA #%11100000,#%11100010,#%11100100,#%11100110,#%11101000,#%11101010,#%11101100,#%11101110
* .DA #%11110000,#%11110010,#%11110100,#%11110110,#%11111000,#%11111010,#%11111100,#%11111110
SHIFT8.L2 .DA #%00000000,#%00000100,#%00001000,#%00001100,#%00010000,#%00010100,#%00011000,#%00011100
.DA #%00100000,#%00100100,#%00101000,#%00101100,#%00110000,#%00110100,#%00111000,#%00111100
.DA #%01000000,#%01000100,#%01001000,#%01001100,#%01010000,#%01010100,#%01011000,#%01011100
.DA #%01100000,#%01100100,#%01101000,#%01101100,#%01110000,#%01110100,#%01111000,#%01111100
.DA #%10000000,#%10000100,#%10001000,#%10001100,#%10010000,#%10010100,#%10011000,#%10011100
.DA #%10100000,#%10100100,#%10101000,#%10101100,#%10110000,#%10110100,#%10111000,#%10111100
.DA #%11000000,#%11000100,#%11001000,#%11001100,#%11010000,#%11010100,#%11011000,#%11011100
.DA #%11100000,#%11100100,#%11101000,#%11101100,#%11110000,#%11110100,#%11111000,#%11111100
.DA #%00000001,#%00000101,#%00001001,#%00001101,#%00010001,#%00010101,#%00011001,#%00011101
.DA #%00100001,#%00100101,#%00101001,#%00101101,#%00110001,#%00110101,#%00111001,#%00111101
.DA #%01000001,#%01000101,#%01001001,#%01001101,#%01010001,#%01010101,#%01011001,#%01011101
.DA #%01100001,#%01100101,#%01101001,#%01101101,#%01110001,#%01110101,#%01111001,#%01111101
.DA #%10000001,#%10000101,#%10001001,#%10001101,#%10010001,#%10010101,#%10011001,#%10011101
.DA #%10100001,#%10100101,#%10101001,#%10101101,#%10110001,#%10110101,#%10111001,#%10111101
.DA #%11000001,#%11000101,#%11001001,#%11001101,#%11010001,#%11010101,#%11011001,#%11011101
.DA #%11100001,#%11100101,#%11101001,#%11101101,#%11110001,#%11110101,#%11111001,#%11111101
SHIFT8.L3 .DA #%00000000,#%00001000,#%00010000,#%00011000,#%00100000,#%00101000,#%00110000,#%00111000
.DA #%01000000,#%01001000,#%01010000,#%01011000,#%01100000,#%01101000,#%01110000,#%01111000
.DA #%10000000,#%10001000,#%10010000,#%10011000,#%10100000,#%10101000,#%10110000,#%10111000
.DA #%11000000,#%11001000,#%11010000,#%11011000,#%11100000,#%11101000,#%11110000,#%11111000
.DA #%00000001,#%00001001,#%00010001,#%00011001,#%00100001,#%00101001,#%00110001,#%00111001
.DA #%01000001,#%01001001,#%01010001,#%01011001,#%01100001,#%01101001,#%01110001,#%01111001
.DA #%10000001,#%10001001,#%10010001,#%10011001,#%10100001,#%10101001,#%10110001,#%10111001
.DA #%11000001,#%11001001,#%11010001,#%11011001,#%11100001,#%11101001,#%11110001,#%11111001
.DA #%00000010,#%00001010,#%00010010,#%00011010,#%00100010,#%00101010,#%00110010,#%00111010
.DA #%01000010,#%01001010,#%01010010,#%01011010,#%01100010,#%01101010,#%01110010,#%01111010
.DA #%10000010,#%10001010,#%10010010,#%10011010,#%10100010,#%10101010,#%10110010,#%10111010
.DA #%11000010,#%11001010,#%11010010,#%11011010,#%11100010,#%11101010,#%11110010,#%11111010
.DA #%00000011,#%00001011,#%00010011,#%00011011,#%00100011,#%00101011,#%00110011,#%00111011
.DA #%01000011,#%01001011,#%01010011,#%01011011,#%01100011,#%01101011,#%01110011,#%01111011
.DA #%10000011,#%10001011,#%10010011,#%10011011,#%10100011,#%10101011,#%10110011,#%10111011
.DA #%11000011,#%11001011,#%11010011,#%11011011,#%11100011,#%11101011,#%11110011,#%11111011
SHIFT8.L4 .DA #%00000000,#%00010000,#%00100000,#%00110000,#%01000000,#%01010000,#%01100000,#%01110000
.DA #%10000000,#%10010000,#%10100000,#%10110000,#%11000000,#%11010000,#%11100000,#%11110000
.DA #%00000001,#%00010001,#%00100001,#%00110001,#%01000001,#%01010001,#%01100001,#%01110001
.DA #%10000001,#%10010001,#%10100001,#%10110001,#%11000001,#%11010001,#%11100001,#%11110001
.DA #%00000010,#%00010010,#%00100010,#%00110010,#%01000010,#%01010010,#%01100010,#%01110010
.DA #%10000010,#%10010010,#%10100010,#%10110010,#%11000010,#%11010010,#%11100010,#%11110010
.DA #%00000011,#%00010011,#%00100011,#%00110011,#%01000011,#%01010011,#%01100011,#%01110011
.DA #%10000011,#%10010011,#%10100011,#%10110011,#%11000011,#%11010011,#%11100011,#%11110011
.DA #%00000100,#%00010100,#%00100100,#%00110100,#%01000100,#%01010100,#%01100100,#%01110100
.DA #%10000100,#%10010100,#%10100100,#%10110100,#%11000100,#%11010100,#%11100100,#%11110100
.DA #%00000101,#%00010101,#%00100101,#%00110101,#%01000101,#%01010101,#%01100101,#%01110101
.DA #%10000101,#%10010101,#%10100101,#%10110101,#%11000101,#%11010101,#%11100101,#%11110101
.DA #%00000110,#%00010110,#%00100110,#%00110110,#%01000110,#%01010110,#%01100110,#%01110110
.DA #%10000110,#%10010110,#%10100110,#%10110110,#%11000110,#%11010110,#%11100110,#%11110110
.DA #%00000111,#%00010111,#%00100111,#%00110111,#%01000111,#%01010111,#%01100111,#%01110111
.DA #%10000111,#%10010111,#%10100111,#%10110111,#%11000111,#%11010111,#%11100111,#%11110111
SHIFT8.L5 .DA #%00000000,#%00100000,#%01000000,#%01100000,#%10000000,#%10100000,#%11000000,#%11100000
.DA #%00000001,#%00100001,#%01000001,#%01100001,#%10000001,#%10100001,#%11000001,#%11100001
.DA #%00000010,#%00100010,#%01000010,#%01100010,#%10000010,#%10100010,#%11000010,#%11100010
.DA #%00000011,#%00100011,#%01000011,#%01100011,#%10000011,#%10100011,#%11000011,#%11100011
.DA #%00000100,#%00100100,#%01000100,#%01100100,#%10000100,#%10100100,#%11000100,#%11100100
.DA #%00000101,#%00100101,#%01000101,#%01100101,#%10000101,#%10100101,#%11000101,#%11100101
.DA #%00000110,#%00100110,#%01000110,#%01100110,#%10000110,#%10100110,#%11000110,#%11100110
.DA #%00000111,#%00100111,#%01000111,#%01100111,#%10000111,#%10100111,#%11000111,#%11100111
.DA #%00001000,#%00101000,#%01001000,#%01101000,#%10001000,#%10101000,#%11001000,#%11101000
.DA #%00001001,#%00101001,#%01001001,#%01101001,#%10001001,#%10101001,#%11001001,#%11101001
.DA #%00001010,#%00101010,#%01001010,#%01101010,#%10001010,#%10101010,#%11001010,#%11101010
.DA #%00001011,#%00101011,#%01001011,#%01101011,#%10001011,#%10101011,#%11001011,#%11101011
.DA #%00001100,#%00101100,#%01001100,#%01101100,#%10001100,#%10101100,#%11001100,#%11101100
.DA #%00001101,#%00101101,#%01001101,#%01101101,#%10001101,#%10101101,#%11001101,#%11101101
.DA #%00001110,#%00101110,#%01001110,#%01101110,#%10001110,#%10101110,#%11001110,#%11101110
.DA #%00001111,#%00101111,#%01001111,#%01101111,#%10001111,#%10101111,#%11001111,#%11101111
SHIFT8.L6 .DA #%00000000,#%01000000,#%10000000,#%11000000,#%00000001,#%01000001,#%10000001,#%11000001
.DA #%00000010,#%01000010,#%10000010,#%11000010,#%00000011,#%01000011,#%10000011,#%11000011
.DA #%00000100,#%01000100,#%10000100,#%11000100,#%00000101,#%01000101,#%10000101,#%11000101
.DA #%00000110,#%01000110,#%10000110,#%11000110,#%00000111,#%01000111,#%10000111,#%11000111
.DA #%00001000,#%01001000,#%10001000,#%11001000,#%00001001,#%01001001,#%10001001,#%11001001
.DA #%00001010,#%01001010,#%10001010,#%11001010,#%00001011,#%01001011,#%10001011,#%11001011
.DA #%00001100,#%01001100,#%10001100,#%11001100,#%00001101,#%01001101,#%10001101,#%11001101
.DA #%00001110,#%01001110,#%10001110,#%11001110,#%00001111,#%01001111,#%10001111,#%11001111
.DA #%00010000,#%01010000,#%10010000,#%11010000,#%00010001,#%01010001,#%10010001,#%11010001
.DA #%00010010,#%01010010,#%10010010,#%11010010,#%00010011,#%01010011,#%10010011,#%11010011
.DA #%00010100,#%01010100,#%10010100,#%11010100,#%00010101,#%01010101,#%10010101,#%11010101
.DA #%00010110,#%01010110,#%10010110,#%11010110,#%00010111,#%01010111,#%10010111,#%11010111
.DA #%00011000,#%01011000,#%10011000,#%11011000,#%00011001,#%01011001,#%10011001,#%11011001
.DA #%00011010,#%01011010,#%10011010,#%11011010,#%00011011,#%01011011,#%10011011,#%11011011
.DA #%00011100,#%01011100,#%10011100,#%11011100,#%00011101,#%01011101,#%10011101,#%11011101
.DA #%00011110,#%01011110,#%10011110,#%11011110,#%00011111,#%01011111,#%10011111,#%11011111
SHIFT8.L7 .DA #%00000000,#%10000000,#%00000001,#%10000001,#%00000010,#%10000010,#%00000011,#%10000011
.DA #%00000100,#%10000100,#%00000101,#%10000101,#%00000110,#%10000110,#%00000111,#%10000111
.DA #%00001000,#%10001000,#%00001001,#%10001001,#%00001010,#%10001010,#%00001011,#%10001011
.DA #%00001100,#%10001100,#%00001101,#%10001101,#%00001110,#%10001110,#%00001111,#%10001111
.DA #%00010000,#%10010000,#%00010001,#%10010001,#%00010010,#%10010010,#%00010011,#%10010011
.DA #%00010100,#%10010100,#%00010101,#%10010101,#%00010110,#%10010110,#%00010111,#%10010111
.DA #%00011000,#%10011000,#%00011001,#%10011001,#%00011010,#%10011010,#%00011011,#%10011011
.DA #%00011100,#%10011100,#%00011101,#%10011101,#%00011110,#%10011110,#%00011111,#%10011111
.DA #%00100000,#%10100000,#%00100001,#%10100001,#%00100010,#%10100010,#%00100011,#%10100011
.DA #%00100100,#%10100100,#%00100101,#%10100101,#%00100110,#%10100110,#%00100111,#%10100111
.DA #%00101000,#%10101000,#%00101001,#%10101001,#%00101010,#%10101010,#%00101011,#%10101011
.DA #%00101100,#%10101100,#%00101101,#%10101101,#%00101110,#%10101110,#%00101111,#%10101111
.DA #%00110000,#%10110000,#%00110001,#%10110001,#%00110010,#%10110010,#%00110011,#%10110011
.DA #%00110100,#%10110100,#%00110101,#%10110101,#%00110110,#%10110110,#%00110111,#%10110111
.DA #%00111000,#%10111000,#%00111001,#%10111001,#%00111010,#%10111010,#%00111011,#%10111011
.DA #%00111100,#%10111100,#%00111101,#%10111101,#%00111110,#%10111110,#%00111111,#%10111111
*--------------------------------------
.LIST ON
X.OSD.LEN .EQ *-X.OSD
.LIST OFF
*--------------------------------------
MAN
SAVE usr/src/drv/dhgr.drv.s.osd
LOAD usr/src/drv/dhgr.drv.s
ASM