1
0
mirror of synced 2026-01-11 23:42:59 +00:00

146 lines
2.5 KiB
Forth

\ simplified version of the OpenBIOS cgthree code
\ ... for the bw2
: openbios-video-width
h# SBUSFPGA_CG3_WIDTH
;
: openbios-video-height
h# SBUSFPGA_CG3_HEIGHT
;
: depth-bits
h# 1
;
: line-bytes
h# SBUSFPGA_CG3_WIDTH h# 8 /
;
sfra_bw2_bt constant bw2-off-dac
h# 20 constant /bw2-off-dac
h# 800000 constant bw2-off-fb
h# SBUSFPGA_CG3_BUFSIZE constant /bw2-off-fb
: >bw2-reg-spec ( offset size -- encoded-reg )
>r 0 my-address d+ my-space encode-phys r> encode-int encode+
;
: bw2-reg
\ A real bw2 rom appears to just map the entire region with a
\ single entry
h# 0 h# 1000000 >bw2-reg-spec
" reg" property
;
: do-map-in ( offset size -- virt )
>r my-space r> " map-in" $call-parent
;
: do-map-out ( virt size )
" map-out" $call-parent
;
\
\ DAC
\
-1 value bw2-dac
-1 value fb-addr
: dac! ( data reg# -- )
bw2-dac + c!
;
headerless
\
\ Mapping
\
: dac-map
bw2-off-dac /bw2-off-dac do-map-in to bw2-dac
;
: dac-unmap
bw2-dac /bw2-off-dac do-map-out
-1 to bw2-dac
;
: fb-map
bw2-off-fb /bw2-off-fb do-map-in to fb-addr
;
: fb-unmap
bw2-off-fb /bw2-off-fb do-map-out
-1 to fb-addr
;
: map-regs
dac-map fb-map
;
: unmap-regs
dac-unmap fb-unmap
;
\
\ Installation
\
" bwtwo" device-name
" display" device-type
" RDOL,sbusfpga" model
: qemu-bw2-driver-install ( -- )
bw2-dac -1 = if
map-regs
fb-map
fb-addr to frame-buffer-adr
default-font set-font
frame-buffer-adr encode-int " address" property \ CHECKME
openbios-video-width openbios-video-height over char-width / over char-height /
\ fb1-install ; not supported in my OF compiler :-( -> explicit code# 1 7b
tokenizer[ h# 1 emit-byte h# 7b emit-byte ]tokenizer
then
;
: qemu-bw2-driver-remove ( -- )
bw2-dac -1 <> if
unmap-regs
fb-unmap
-1 to frame-buffer-adr
" address" delete-attribute
then
;
: qemu-bw2-driver-init
bw2-reg
openbios-video-height encode-int " height" property
openbios-video-width encode-int " width" property
depth-bits encode-int " depth" property
line-bytes encode-int " linebytes" property
h# 39 encode-int 0 encode-int encode+ " intr" property
\ Monitor sense. Some searching suggests that this is
\ 5 for 1024x768 and 7 for 1152x900
h# 7 encode-int " monitor-sense" property
" RDOL" encode-string " manufacturer" property
" ISO8859-1" encode-string " character-set" property
h# c encode-int " cursorshift" property
['] qemu-bw2-driver-install is-install
['] qemu-bw2-driver-remove is-remove
;
qemu-bw2-driver-init