From 91f5b36fbc683305c1da518cfd876ea25a0585ae Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Wed, 7 Feb 2024 19:15:46 -0800 Subject: [PATCH] Support for EF9345 Video Display Controller - Thanks and credit to Laszlo Szolnoki for contributing this driver. --- Doc/ChangeLog.txt | 1 + Doc/RomWBW Applications.pdf | Bin 239632 -> 239632 bytes Doc/RomWBW Disk Catalog.pdf | Bin 123540 -> 123540 bytes Doc/RomWBW Errata.pdf | Bin 28721 -> 28721 bytes Doc/RomWBW ROM Applications.pdf | Bin 155018 -> 155018 bytes Doc/RomWBW System Guide.pdf | Bin 567579 -> 567579 bytes Doc/RomWBW User Guide.pdf | Bin 777778 -> 777821 bytes Source/Doc/UserGuide.md | 1 + Source/HBIOS/Config/RCZ180_ext.asm | 1 + Source/HBIOS/Config/RCZ180_nat.asm | 1 + Source/HBIOS/Config/RCZ180_z1rcc.asm | 1 + Source/HBIOS/Config/RCZ280_ext.asm | 1 + Source/HBIOS/Config/RCZ280_nat.asm | 1 + Source/HBIOS/Config/RCZ280_zz80mb.asm | 1 + Source/HBIOS/Config/RCZ280_zzrcc.asm | 1 + Source/HBIOS/Config/RCZ280_zzrcc_ram.asm | 1 + Source/HBIOS/Config/RCZ80_easy.asm | 1 + Source/HBIOS/Config/RCZ80_jbl.asm | 1 + Source/HBIOS/Config/RCZ80_kio.asm | 1 + Source/HBIOS/Config/RCZ80_skz.asm | 1 + Source/HBIOS/Config/RCZ80_std.asm | 1 + Source/HBIOS/Config/RCZ80_tiny.asm | 1 + Source/HBIOS/Config/RCZ80_zrc.asm | 1 + Source/HBIOS/Config/RCZ80_zrc512.asm | 1 + Source/HBIOS/Config/RCZ80_zrc_ram.asm | 1 + Source/HBIOS/Config/SCZ180_sc126.asm | 1 + Source/HBIOS/Config/SCZ180_sc130.asm | 1 + Source/HBIOS/Config/SCZ180_sc700.asm | 1 + Source/HBIOS/cfg_duo.asm | 1 + Source/HBIOS/cfg_dyno.asm | 1 + Source/HBIOS/cfg_epitx.asm | 1 + Source/HBIOS/cfg_heath.asm | 1 + Source/HBIOS/cfg_master.asm | 1 + Source/HBIOS/cfg_mbc.asm | 1 + Source/HBIOS/cfg_mk4.asm | 1 + Source/HBIOS/cfg_mon.asm | 1 + Source/HBIOS/cfg_n8.asm | 1 + Source/HBIOS/cfg_rcz180.asm | 1 + Source/HBIOS/cfg_rcz280.asm | 1 + Source/HBIOS/cfg_rcz80.asm | 1 + Source/HBIOS/cfg_rph.asm | 1 + Source/HBIOS/cfg_s100.asm | 1 + Source/HBIOS/cfg_sbc.asm | 1 + Source/HBIOS/cfg_scz180.asm | 1 + Source/HBIOS/cfg_z80retro.asm | 1 + Source/HBIOS/cfg_zeta.asm | 1 + Source/HBIOS/cfg_zeta2.asm | 1 + Source/HBIOS/ef.asm | 1083 ++++++++++++++++++++++ Source/HBIOS/hbios.asm | 12 + Source/HBIOS/hbios.inc | 2 + Source/HBIOS/std.asm | 3 +- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 53 files changed, 1142 insertions(+), 3 deletions(-) create mode 100644 Source/HBIOS/ef.asm diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 85e1400e..7ecfa285 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -8,6 +8,7 @@ Version 3.5 - WBW: Add API to expose application banks available - WBW: Added console takeover at boot loader prompt - L?N: Fixed Propeller font vertical line character to align properly +- L?S: EF9345 video display controller driver Version 3.4 ----------- diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index b38b3c407409e47157aa8f115092c9265598104f..06ed5b7916a78b3eaa828a9cfa649c3dc7da74cd 100644 GIT binary patch delta 136 zcmbPmfp5YEzJ?aY7N#xC<@v0Z28PDw(`)jX^a} E0Pu1n3IG5A delta 136 zcmbPmfp5YEzJ?aY7N#xC<@v0}1|~)((`)jX^a} E0228ljsO4v diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index b3431d604e5e44c0c70796e041b6a3418619fb0b..abeef0909344235f23c40125f2faa2420c8d102c 100644 GIT binary patch delta 107 zcmbPolzqxk_J%EtlP|DZ8W@_IOrLRqQ4Ye~zWV}Wg`l&Ai>0%Rvzw)nk&&CJtGS7x erMat-g{zs9i?gw-tFeKdf(;=h)5{()$^ii5B_1RI delta 107 zcmbPolzqxk_J%EtlP|Cu8jsQ4Ye~zWV}Wg`l&mrL&u{v4yFbo3opfp^K}r eim#V6(zZ(|- D*Ha?S diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf index 2d311f8749df68821383b4baf6c1d9316c77c6dd..a94bdee89d254cd43277c092208127de2e00c428 100644 GIT binary patch delta 115 zcmeC$&Dph^v!R7?3zMWBtEGXViRt7G%;G#oCI&_Z=7wN_?T&U#FXWsZjZBS=jhx(E mjZB;z4Gi5Jjm?aV9SzM)&5fLmUCdqV6l@47nVu8NBnJS-Y#eL= delta 115 zcmeC$&Dph^v!R7?3zMWBtFeKJvGL>$%;G#oCI&_Z=7wN_?T&U#FXWs}-7MWKEKDsO mU0of`UCa$F4V;Z#3=J(!oGlE^U7Zc=6l@47nVu8NBnJT0BOJN_ diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index 7ce63e913443e1f4de794df2e0ada58af44b184e..b6feccba1bd750599cb54800d74cea08759520c4 100644 GIT binary patch delta 121 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 delta 14279 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