Currently we cannot read the FCode from the card, so for the moment simply execute the bytecode directly.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@ilande.co.uk --- openbios-devel/arch/sparc32/build.xml | 1 + openbios-devel/arch/sparc32/init.fs | 6 ++++++ openbios-devel/arch/sparc32/tree.fs | 1 + openbios-devel/drivers/build.xml | 3 ++- openbios-devel/drivers/sbus.c | 5 ++++- openbios-devel/drivers/tcx.fs | 35 ++++++++++++++++++++++++++++++++- 6 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/openbios-devel/arch/sparc32/build.xml b/openbios-devel/arch/sparc32/build.xml index 47ad01a..035c25c 100644 --- a/openbios-devel/arch/sparc32/build.xml +++ b/openbios-devel/arch/sparc32/build.xml @@ -3,6 +3,7 @@ <dictionary name="openbios-sparc32" init="openbios"> <object source="tree.fs" target="forth"/> <object source="init.fs" target="forth"/> + <object source="QEMU,tcx.bin" target="fcode" condition="DRIVER_SBUS"/> </dictionary>
<library name="sparc32" type="static" target="target"> diff --git a/openbios-devel/arch/sparc32/init.fs b/openbios-devel/arch/sparc32/init.fs index 26ffa05..e2cd571 100644 --- a/openbios-devel/arch/sparc32/init.fs +++ b/openbios-devel/arch/sparc32/init.fs @@ -45,3 +45,9 @@ device-end : obmem ( -- space ) 0 ; + +\ Load TCX FCode driver blob +[IFDEF] CONFIG_DRIVER_SBUS + -1 value tcx-driver-fcode + " QEMU,tcx.bin" $encode-file to tcx-driver-fcode +[THEN] diff --git a/openbios-devel/arch/sparc32/tree.fs b/openbios-devel/arch/sparc32/tree.fs index f9a0406..0f31f4f 100644 --- a/openbios-devel/arch/sparc32/tree.fs +++ b/openbios-devel/arch/sparc32/tree.fs @@ -1,3 +1,4 @@ +include config.fs
" /" find-device 2 encode-int " #address-cells" property diff --git a/openbios-devel/drivers/build.xml b/openbios-devel/drivers/build.xml index e564292..f144782 100644 --- a/openbios-devel/drivers/build.xml +++ b/openbios-devel/drivers/build.xml @@ -29,8 +29,9 @@ <object source="pci.fs" condition="DRIVER_PCI"/> <object source="sbus.fs" condition="DRIVER_SBUS"/> <object source="esp.fs" condition="DRIVER_ESP"/> - <object source="tcx.fs" condition="DRIVER_SBUS"/> <object source="vga.fs" condition="DRIVER_VGA"/> </dictionary>
+ <fcode source="tcx.fs" name="QEMU,tcx.bin" condition="DRIVER_SBUS" /> + </build> diff --git a/openbios-devel/drivers/sbus.c b/openbios-devel/drivers/sbus.c index 8cc0bf9..5f2592f 100644 --- a/openbios-devel/drivers/sbus.c +++ b/openbios-devel/drivers/sbus.c @@ -342,7 +342,10 @@ ob_tcx_init(unsigned int slot, const char *path) }
bind_func("hw-set-color", tcx_hw_set_color); - feval("['] qemu-tcx-driver-init is-install"); + + /* Currently we don't have an SBus probe routine, so execute FCode + directly */ + feval("['] tcx-driver-fcode 2 cells + 1 byte-load");
chosen = find_dev("/chosen"); push_str(path); diff --git a/openbios-devel/drivers/tcx.fs b/openbios-devel/drivers/tcx.fs index 4035b45..1948ff8 100644 --- a/openbios-devel/drivers/tcx.fs +++ b/openbios-devel/drivers/tcx.fs @@ -5,9 +5,42 @@ \ the QEMU TCX graphics card. \
-: qemu-tcx-driver-init ( -- ) +fcode-version3 + +\ +\ Instead of using fixed values for the framebuffer address and the width +\ and height, grab the ones passed in by QEMU/generated by OpenBIOS +\ + +: qemu-video-addr + " qemu-video-addr" $find if + cell+ @ + then +; + +: qemu-video-width + " qemu-video-width" $find if + cell+ @ + then +; + +: qemu-video-height + " qemu-video-height" $find if + cell+ @ + then +; + +: qemu-tcx-driver-install ( -- ) qemu-video-addr to frame-buffer-adr default-font set-font qemu-video-width qemu-video-height over char-width / over char-height / fb8-install ; + +: qemu-tcx-driver-init + ['] qemu-tcx-driver-install is-install +; + +qemu-tcx-driver-init + +end0