From 8b7c167592a21057fe64130813a1e4808892bdf3 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Fri, 24 Apr 2020 11:33:15 -0700 Subject: [PATCH 01/13] Cleanup loader console assignment --- Source/CBIOS/cbios.asm | 42 ++++++++++++++++++++++++++--------------- Source/HBIOS/romldr.asm | 12 +++++++++--- 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index 47c2ca47..f861e737 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -2045,7 +2045,7 @@ DEV_INIT: ; PATCH IN CRT: DEVICE LD A,(HCB + HCB_CRTDEV) ; GET CONSOLE DEVICE CP $FF ; NUL MEANS NO CRT DEVICE - JR Z,DEV_INIT00 ; IF SO, LEAVE IT ALONE + JR Z,DEV_INIT000 ; IF SO, LEAVE IT ALONE LD (DEVMAP + 1),A ; CONSOLE CRT LD (DEVMAP + 13),A ; LIST CRT ; @@ -2054,31 +2054,43 @@ DEV_INIT: LD B,A ; SAVE IN B LD A,(HCB + HCB_CONDEV) ; GET CONSOLE DEVICE CP B ; COMPARE - JR NZ,DEV_INIT00 ; IF DIFFERENT (CRT NOT ACTIVE), LEAVE IOBYTE ALONE + JR NZ,DEV_INIT000 ; IF DIFFERENT (CRT NOT ACTIVE), LEAVE IOBYTE ALONE LD A,1 ; IF SAME (CRT ACTIVE), SET IOBYTE FOR CON: = CRT: LD (IOBYTE),A ; STORE IN IOBYTE + LD HL,DEV_INIT1 ; INIT FIRST DEV ASSIGN ADR + JR DEV_INIT00 ; SKIP AHEAD +; +DEV_INIT000: + ; CONSOLE IS NOT THE CRT, SO + ; ASSIGN CURRENT CONSOLE AS TTY + LD A,(HCB + HCB_CONDEV) ; GET CONSOLE DEVICE + CALL DEV_INIT1 ; ASSIGN AS TTY ; DEV_INIT00: - ; LOOP THRU DEVICES ADDING NON-CRT DEVICES TO DEVMAP + ; LOOP THRU DEVICES ADDING DEVICES TO DEVMAP + ; CONSOLE DEVICE WAS ALREADY DONE, SO IT IS SKIPPED HERE LD B,BF_SYSGET ; HBIOS FUNC: GET SYS INFO LD C,BF_SYSGET_CIOCNT ; SUBFUNC: GET CIO UNIT COUNT RST 08 ; E := SERIAL UNIT COUNT LD B,E ; COUNT TO B LD C,0 ; UNIT INDEX - LD HL,DEV_INIT1 ; POINTER FOR FIRST ENTRY FOUND DEV_INIT0: - PUSH BC ; SAVE LOOP CONTROL - PUSH HL ; SAVE TARGET - LD B,BF_CIODEVICE ; HBIOS FUNC: GET DEVICE INFO - RST 08 ; D := DEVICE TYPE, E := PHYSICAL UNIT NUMBER - POP HL ; RESTORE TARGET - LD A,D ; DEVICE TYPE TO A - ; FIX: BELOW SHOULD TEST THE "TERMINAL" BIT INSTEAD OF CHECKING DEVICE NUMBER - CP CIODEV_TERM ; COMPARE TO FIRST VIDEO DEVICE - POP BC ; RESTORE LOOP CONTROL + ;PUSH BC ; SAVE LOOP CONTROL + ;PUSH HL ; SAVE TARGET + ;LD B,BF_CIODEVICE ; HBIOS FUNC: GET DEVICE INFO + ;RST 08 ; D := DEVICE TYPE, E := PHYSICAL UNIT NUMBER + ;POP HL ; RESTORE TARGET + ;LD A,D ; DEVICE TYPE TO A + ;; FIX: BELOW SHOULD TEST THE "TERMINAL" BIT INSTEAD OF CHECKING DEVICE NUMBER + ;CP CIODEV_TERM ; COMPARE TO FIRST VIDEO DEVICE + ;POP BC ; RESTORE LOOP CONTROL + ;LD A,C ; UNIT INDEX TO ACCUM + ;;CALL C,JPHL ; DO IT IF DEVICE TYPE < VDU + + LD A,(HCB + HCB_CONDEV) ; CURRENT CONSOLE UNIT + CP C ; IS CURRENT CONSOLE? LD A,C ; UNIT INDEX TO ACCUM - ;CALL C,JPHL ; DO IT IF DEVICE TYPE < VDU - CALL JPHL ; DO FOR ANY CHARACTER DEVICE TYPE + CALL NZ,JPHL ; DO IF NOT CURRENT CONSOLE INC C ; NEXT UNIT DJNZ DEV_INIT0 ; LOOP TILL DONE RET ; ALL DONE diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 833dac77..884c5cce 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -282,7 +282,7 @@ runcmd: cp 'R' ; R = reboot system jp z,reboot ; if so, do it #if (BIOS == BIOS_WBW) - cp 'C' ; C = set console unit + cp 'I' ; C = set console interface jp z,setcon ; if so, do it #endif ; @@ -426,7 +426,7 @@ devlst: call pstr ; display it jp prtall ; do it ; -; Set console unit +; Set console interface unit ; #if (BIOS == BIOS_WBW) ; @@ -462,6 +462,12 @@ setcon: ld e,a ; Char unit value ld hl,HCB_LOC + HCB_CONDEV ; Con unit num in HCB rst 08 ; do it +; + ; Display loader prompt on new console + call nl2 ; formatting + ld hl,str_banner ; display boot banner + call pstr ; do it +; ret ; done ; #endif @@ -1489,7 +1495,7 @@ str_help .db "\r\n" .db "\r\n D - Disk Device Inventory" .db "\r\n R - Reboot System" #if (BIOS == BIOS_WBW) - .db "\r\n C - Set Console Unit" + .db "\r\n I - Set Console Interface" #endif .db "\r\n [.] - Boot Disk Unit/Slice" .db 0 From 7d6b0113623a4f88f83f831e37802b650f3aaf9e Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Thu, 23 Apr 2020 18:39:49 +1000 Subject: [PATCH 02/13] Whitespace: adjusted whitespace for tms.asm --- Source/HBIOS/tms.asm | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 832e99e0..35497a64 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -107,7 +107,7 @@ TMS_INIT1: ; XOR A ; SIGNAL SUCCESS RET -; +; ;====================================================================== ; TMS DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS ;====================================================================== @@ -170,19 +170,19 @@ TMS_VDARES1: ; ENTRY POINT TO AVOID TMS_Z180IO RECURSION DEC A LD (TMS_CURSAV),A CALL TMS_SETCUR ; SET CURSOR - + XOR A ; SIGNAL SUCCESS RET - + TMS_VDADEV: LD D,VDADEV_TMS ; D := DEVICE TYPE LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO XOR A ; SIGNAL SUCCESS RET - + TMS_VDASCS: CALL PANIC ; NOT IMPLEMENTED (YET) - + TMS_VDASCP: #IF (CPUFAM == CPU_Z180) CALL TMS_Z180IO @@ -192,15 +192,15 @@ TMS_VDASCP: CALL TMS_SETCUR XOR A ; SIGNAL SUCCESS RET - + TMS_VDASAT: XOR A ; NOT POSSIBLE, JUST SIGNAL SUCCESS RET - + TMS_VDASCO: XOR A ; NOT POSSIBLE, JUST SIGNAL SUCCESS RET - + TMS_VDAWRC: #IF (CPUFAM == CPU_Z180) CALL TMS_Z180IO @@ -211,7 +211,7 @@ TMS_VDAWRC: CALL TMS_SETCUR XOR A ; SIGNAL SUCCESS RET - + TMS_VDAFIL: #IF (CPUFAM == CPU_Z180) CALL TMS_Z180IO @@ -239,7 +239,7 @@ TMS_VDACPY: CALL TMS_SETCUR XOR A RET - + TMS_VDASCR: #IF (CPUFAM == CPU_Z180) CALL TMS_Z180IO @@ -294,7 +294,7 @@ TMS_SET: OUT (TMS_CMDREG),A ; WRITE IT TMS_IODELAY LD A,C ; GET THE DESIRED REGISTER - OR $80 ; SET BIT 7 + OR $80 ; SET BIT 7 OUT (TMS_CMDREG),A ; SELECT THE DESIRED REGISTER TMS_IODELAY RET @@ -398,7 +398,7 @@ TMS_LOADFONT: LD (TMS_STACK),SP ; SAVE STACK LD HL,(TMS_STACK) ; AND SHIFT IT LD DE,$2000 ; DOWN 4KB TO - CCF ; CREATE A + CCF ; CREATE A SBC HL,DE ; DECOMPRESSION BUFFER LD SP,HL ; HL POINTS TO BUFFER EX DE,HL ; START OF STACK BUFFER @@ -597,7 +597,7 @@ TMS_SCROLL1: INC DE DJNZ TMS_SCROLL1 POP HL ; RECOVER THE DESTINATION -; +; ; WRITE THE BUFFERED LINE TO CURRENT DESTINATION CALL TMS_WR ; SET UP TO WRITE LD DE,TMS_BUF @@ -733,7 +733,7 @@ TMS_Z180IO: OUT0 (Z180_DCNTL),A ; IMPLEMENT IT POP AF ; RESTORE AF ; BACK TO CALLER -TMS_Z180IOR .EQU $+1 +TMS_Z180IOR .EQU $+1 JP $0000 ; BACK TO CALLER ; TMS_Z180IOX: From ff2ebbb09f168651d0078df7401956e71344cc08 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Thu, 23 Apr 2020 18:43:16 +1000 Subject: [PATCH 03/13] TMS: Enable support for using VSYNC interrupt Use the VSYNC interrupt to trigger the sys timer event --- Source/HBIOS/cfg_master.asm | 1 + Source/HBIOS/cfg_mk4.asm | 1 + Source/HBIOS/cfg_n8.asm | 1 + Source/HBIOS/cfg_sbc.asm | 1 + Source/HBIOS/hbios.asm | 4 +++ Source/HBIOS/std.asm | 1 + Source/HBIOS/tms.asm | 61 +++++++++++++++++++++++++++++++++++++ 7 files changed, 70 insertions(+) diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 01b2ee73..c5ad1178 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -152,6 +152,7 @@ CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG/N8] +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] ; diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index d3bc9127..0b247c57 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -107,6 +107,7 @@ CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG/N8] +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] ; diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 6d669358..20f54fb2 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -110,6 +110,7 @@ CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG/N8] +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] ; diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index f834039d..0e751225 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -111,6 +111,7 @@ CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG/N8] +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] ; diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 65c4dbff..cc7fda0c 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -986,6 +986,10 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK ; ; MAKE SURE IM1 INT VECTOR IS RIGHT #IF (INTMODE == 1) + #IF (TMSTIMENABLE) + CALL TMS_INT_DIS ; SPECIAL CASE - NEED TO STOP TMS9918 FROM FIRING INTERRUPTS + #ENDIF ; WHEN DRIVER IS LOADED - IT WILL BE RELOADED + ; JP INT_IM1 IF INTERRUPT MODE ACTIVE LD A,$C3 LD ($0038),A diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 32b1739a..15dfdb34 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -186,6 +186,7 @@ AYMODE_RCZ180 .EQU 4 ; RC2014 SOUND MODULE BY ED BRINDLEY ON Z180 TMSMODE_NONE .EQU 0 TMSMODE_SCG .EQU 1 ; SCG ECB BOARD TMSMODE_N8 .EQU 2 ; N8 BUILT-IN VIDEO +TMSMODE_RC2014 .EQU 3 ; RC2014 BUILT-IN VIDEO ; ; SERIAL DEVICE CONFIGURATION CONSTANTS ; diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 35497a64..e6c05c0c 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -14,6 +14,24 @@ ; TMS DRIVER - CONSTANTS ;====================================================================== ; + +TMSCTRL1: .EQU 1 ; CONTROL BITS +TMSINTEN: .EQU 5 ; INTERRUPT ENABLE BIT + +#IF TMSTIMENABLE + .ECHO "TMS INTERRUPTS ENABLED" +#ENDIF + +#IF (TMSMODE == TMSMODE_RC2014) +TMS_DATREG .EQU $BE ; READ/WRITE DATA +TMS_CMDREG .EQU $BF ; READ STATUS / WRITE REG SEL +TMS_PPIA .EQU 0 ; PPI PORT A +TMS_PPIB .EQU 0 ; PPI PORT B +TMS_PPIC .EQU 0 ; PPI PORT C +TMS_PPIX .EQU 0 ; PPI CONTROL PORT + +#ENDIF + #IF (TMSMODE == TMSMODE_N8) TMS_DATREG .EQU $98 ; READ/WRITE DATA @@ -93,6 +111,17 @@ TMS_INIT1: #IF (TMSMODE == TMSMODE_N8) CALL PPK_INIT ; INITIALIZE KEYBOARD DRIVER #ENDIF +#IF (INTMODE == 1 & TMSTIMENABLE) + ; ADD IM1 INT CALL LIST ENTRY + LD HL, TMS_TSTINT ; GET INT VECTOR + CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST + + LD A, (TMS_INIT9918_REG_1) + SET TMSINTEN, A ; SET INTERRUPT ENABLE BIT + LD (TMS_INIT9918_REG_1), A + LD C, TMSCTRL1 + CALL TMS_SET +#ENDIF ; ; ADD OURSELVES TO VDA DISPATCH TABLE LD BC,TMS_FNTBL ; BC := FUNCTION TABLE ADDRESS @@ -107,6 +136,23 @@ TMS_INIT1: ; XOR A ; SIGNAL SUCCESS RET + +#IFDEF APPBOOT +#IF TMSTIMENABLE + ; SPECIAL CASE FOR APPBOOT - NEEDING TO DISABLE INTERRUPT GENERATOR + ; ISSUE: + ; IF THE CURRENT ROMBOOT HAD LOADED THE TMS DRIVER + ; THEN THE ROMLOADER MAY START RECEIVING INTERRUPTS + ; FROM THE CHIP BEFORE THE TMS DRIVER HAS BEEN RE- + ; INITALISED, AND CAUSING BAD INT PANICS +TMS_INT_DIS: + LD A, (TMS_INIT9918_REG_1) + RES TMSINTEN, A ; RESET INTERRUPT ENABLE BIT + LD (TMS_INIT9918_REG_1), A + LD C, TMSCTRL1 + JP TMS_SET +#ENDIF +#ENDIF ; ;====================================================================== ; TMS DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS @@ -745,6 +791,20 @@ TMS_Z180IOX: RET ; DONE ; #ENDIF + +#IF (INTMODE == 1 & TMSTIMENABLE) +TMS_TSTINT: + IN A, (TMS_CMDREG) ; TEST FOR INT FLAG + AND $80 + JR NZ, TMS_INTHNDL + AND $00 ; RETURN Z - NOT HANDLED + RET + +TMS_INTHNDL: + CALL HB_TIMINT ; RETURN NZ - HANDLED + OR $FF + RET +#ENDIF ; ;================================================================================================== ; TMS DRIVER - DATA @@ -798,6 +858,7 @@ TMS_BUF .FILL 256,0 ; COPY BUFFER ; TMS_INIT9918: .DB $00 ; REG 0 - NO EXTERNAL VID +TMS_INIT9918_REG_1: .DB $50 ; REG 1 - ENABLE SCREEN, SET MODE 1 .DB $00 ; REG 2 - PATTERN NAME TABLE := 0 .DB $00 ; REG 3 - NO COLOR TABLE From 9957fbfd33e13b2c42e82bd4213560c3804f7d07 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Fri, 24 Apr 2020 18:19:12 +1000 Subject: [PATCH 04/13] ChangeLog: Whitespace and updated D?N to DEN --- Doc/ChangeLog.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index c59dbbb3..d9cbbacd 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -9,8 +9,8 @@ Version 3.1 - WBW: Support use of CTC for SIO baud rate divisors - WBW: Updated IDE and PPIDE drivers to improve old CF Card compatibility - WBW: Support TIMER mode in CTC driver -- D?N: Added sound driver support -- D?N: Added SN76489 sound chip driver +- DEN: Added sound driver support +- DEN: Added SN76489 sound chip driver - M?O: RomWBW Disk Catalog document Version 3.0.1 @@ -283,7 +283,7 @@ Version 2.0 - DWG: Entire new suite of Apps written in Aztec C - DWG: BANKER.COM - displays bank identification and version information - DWG: CPMNAME.COM - displays CBIOS header data and SYSCFG data, names and vaues -- DWG: CHARS.COM - displays ascii map as reference +- DWG: CHARS.COM - displays ascii map as reference - DWG: CLS.COM - clears screen - DWG: LABEL.COM - displays and changes drive labels for drives with reserved tracks - DWG: MAP.COM - like old map command, displays drives and logical unit labels and changes LU values @@ -315,7 +315,7 @@ Version 1.5.1 - WBW: Added ZSDOS clock drivers (see Support\Clock) - WBW: Overhaul of ZSystem ROM Disk (see Doc\ZSystem.txt) - WBW: Update PropIO ANSI emulation for compatiblity with ASSIGN -- DWG: Added version tags to all applications, and IDENT program to +- DWG: Added version tags to all applications, and IDENT program to check version of utilities. - DWG: Added MULTIFMT program which prepares new media for use by initializing the metadata and clearing the directory sectors of @@ -325,8 +325,8 @@ Version 1.5.1 - DWG: ANALYSE and HELLO programs removed from ROM due space concerns - DWG: Additional macro librarties added supporting program identification (IDENTITY.LIB/ASM) and access to drive metadata (METADATA.LIB/ASM), - and realtime selection of logical units from within new application - programs (LOGICALS.LIB/ASM). + and realtime selection of logical units from within new application + programs (LOGICALS.LIB/ASM). - DWG: Added TERM_VT52 for VDU compatbility, all apps now compliant - DGG: Contributed Linux build (see Doc\BuildLinux.txt) @@ -354,7 +354,7 @@ Version 1.4 - DWG: Add various .SUB files used for application maintenance - DWG: Enhanced utility building .SUB files to only contain libs utilitized - DWG: Add BUILD.SUB to build all applications and DEVFILES.LBR -- DWG: Add/update RMAC macro libraries used in Apps - +- DWG: Add/update RMAC macro libraries used in Apps - - DWG: BIOSHDR, STDLIB, STRCPY, STRLEN, CPMBIOS, CPMBDOS, TERMINAL, HARDWARE, - DWG: CPMAPPL, GLOBALS, ATOI, LUBIND, APPLVERS, MEMORY(memcpy,memset), PORTAB - DWG: Add/Repair BIOS support for Boot Drive login during CP/M Coldstart @@ -373,7 +373,7 @@ Version 1.4 - DWG: Add LABEL utility to insert label into drive/slice metadata - DWG: Add 16 char label field to metadata - DWG: ASSIGN utility displays and manipulates DPH/DPB & logical unit parameters -- DWG/WBW: Collaborated on design of Logical Unit DPH enhancemnt +- DWG/WBW: Collaborated on design of Logical Unit DPH enhancemnt - WBW: Proposed MAP utility functionality - WBW: Implement slice selection API for DSK devices - WBW: Record boot drive in config memory at load time From ef52d1730313fd0e6dacd6c046b91f00f8128e33 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Fri, 24 Apr 2020 18:21:04 +1000 Subject: [PATCH 05/13] ChangeLog: Added entries for TMS/SYSTIME --- Doc/ChangeLog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index d9cbbacd..c2b35af5 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -12,6 +12,7 @@ Version 3.1 - DEN: Added sound driver support - DEN: Added SN76489 sound chip driver - M?O: RomWBW Disk Catalog document +- DEN: Updated TMS to optionally trigger SYSTIMER interrupt (TMSTIMENABLE) Version 3.0.1 ------------- From 1388b8495c88616b4bd6f82fb0eb5a20a15d3ae4 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Sat, 25 Apr 2020 12:30:51 +1000 Subject: [PATCH 06/13] whitespace: removed trailing whitespaces from Tune.asm --- Source/Apps/Tune/Tune.asm | 102 +++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/Source/Apps/Tune/Tune.asm b/Source/Apps/Tune/Tune.asm index 046b83ac..60ef8d38 100644 --- a/Source/Apps/Tune/Tune.asm +++ b/Source/Apps/Tune/Tune.asm @@ -51,9 +51,9 @@ ; RESTART .EQU $0000 ; CP/M restart vector BDOS .EQU $0005 ; BDOS invocation vector -; +; IDENT .EQU $FFFE ; loc of RomWBW HBIOS ident ptr -; +; RMJ .EQU 3 ; intended CBIOS version - major RMN .EQU 1 ; intended CBIOS version - minor ; @@ -75,8 +75,8 @@ TYPMYM .EQU 3 ; FILTYP value for MYM sound file CALL CRLF LD DE,MSGBAN ; Point to banner message CALL PRTSTR ; Print message -; - ; Check BIOS and version +; + ; Check BIOS and version CALL IDBIO ; Identify hardware BIOS CP 1 ; RomWBW HBIOS? JP NZ,ERRBIO ; If not, handle BIOS error @@ -111,7 +111,7 @@ CFGSEL: LD C,A ; Put in C for I/O LD A,$FF ; Value to activate card OUT (C),A ; Write value to ACR -; +; PROBE: ; Test for hardware (sound chip detection) LD DE,(PORTS) ; D := RDAT, E := RSEL @@ -142,15 +142,15 @@ MAT: LD C,$D0 ; TIMER subfunction RST 08 ; DE:HL := current tick count LD A,L ; DE:HL == 0? - OR H - OR E - OR D + OR H + OR E + OR D LD A,0 ; Assume no timer LD DE,MSGDLY ; Delay mode msg JR Z,SETDLY ; If tick count is zero, no timer active LD A,$FF ; Value for timer active LD DE,MSGTIM ; Timer mode msg -SETDLY: +SETDLY: LD (WMOD),A ; Save wait mode CALL PRTSTR ; Print it ; @@ -170,7 +170,7 @@ SETDLY: LD DE,HEAP+1 ; Set dest to next byte LD BC,HEAPEND-HEAP-1 ; Size of heap except first byte LDIR ; Propagate zero to rest of heap -; +; ; Check sound filename (must be *.PT2, *.PT3, or *.MYM) LD A,(FCB+1) ; Get first char of filename CP ' ' ; Compare to blank @@ -179,7 +179,7 @@ SETDLY: CP ' ' ; is blanks JR NZ,HASEXT ; then assume LD A,'P' ; type PT3. - LD (FCB+9),A + LD (FCB+9),A LD A,'T' ; Fill in LD (FCB+10),A ; the file LD A,'3' ; extension @@ -220,7 +220,7 @@ _LD0 LD C,15 ; CPM Open File function CALL BDOS ; Do it INC A ; Test for error $FF JP Z,ERRFIL ; Handle file error -; +; LD A,(FILTYP) ; Get file type LD HL,MDLADDR ; Assume load address LD (DMA),HL ; ... for PTx files @@ -240,19 +240,19 @@ _LD LD HL,(DMA) ; Get load address POP DE ; Restore current DMA to DE LD C,26 ; CPM Set DMA function CALL BDOS ; Read next 128 bytes -; +; LD C,20 ; CPM Read Sequential function LD DE,FCB ; FCB CALL BDOS ; Read next 128 bytes OR A ; Set flags to check EOF JR NZ,_LDX ; Non-zero is EOF JR Z,_LD ; Load loop -; +; _LDX LD C,16 ; CPM Close File function LD DE,FCB ; FCB CALL BDOS ; Do it -; - ; Play loop +; + ; Play loop CALL CRLF2 ; Formatting LD DE,MSGPLY ; Playing message CALL PRTSTR ; Print message @@ -319,7 +319,7 @@ waitvb call WAITQ ld (played),a ;call PRTDOT jr mymlp -; +; EXIT CALL START+8 ; Mute audio ;CALL NORMCPU ;CALL CRLF2 ; Formatting @@ -330,14 +330,14 @@ EXIT CALL START+8 ; Mute audio ; ; Wait for quark play time. Can use hardware timer if ; supported by hardware or simple delay loop otherwise. -; Delay loop requires QDLY to be pre-set to to achieve +; Delay loop requires QDLY to be pre-set to to achieve ; optimal 20ms wait time. ; WAITQ LD A,(WMOD) ; Get delay mode OR A ; Set flags JR Z,DLY ; Delay mode -; - ; Timer loop +; + ; Timer loop CALL TIM2 ; Read timer LSB into A LD C,A ; Init prev value TIM1 PUSH BC ; Save prev value @@ -346,13 +346,13 @@ TIM1 PUSH BC ; Save prev value CP C ; Compare to prev RET NZ ; Done if changed JR TIM1 ; Else, loop -; +; TIM2 LD B,$F8 ; BIOS SYSGET function LD C,$D0 ; TIMER sub-function RST 08 ; Call BIOS LD A,L ; MSB to A RET ; Return to loop -; +; ; Delay spin loop (40 tstates per loop) DLY LD BC,(QDLY) ; Load quark delay factor DLY1 DEC BC ; [6] @@ -410,7 +410,7 @@ IDBIO1: LD B,BF_SYSVER ; HBIOS: VER function LD C,0 ; required reserved value RST 08 ; DE := version, L := platform id -; +; LD A,1 ; HBIOS BIOS id = 1 RET ; and done ; @@ -530,7 +530,7 @@ PRTSTR1: ; PRTSTR2: POP DE ; restore registers - RET + RET ; ; Print the value in A in hex without destroying any registers ; @@ -553,7 +553,7 @@ PRTHEXWORD: LD A,B CALL PRTHEX LD A,C - CALL PRTHEX + CALL PRTHEX POP AF RET ; @@ -590,9 +590,9 @@ HEXASCII: HEXCONV: AND $0F ; low nibble only ADD A,$90 - DAA + DAA ADC A,$40 - DAA + DAA RET ; ; Print value of A or HL in decimal with leading zero suppression @@ -712,28 +712,28 @@ CFGSIZ .EQU 8 CFGTBL: ; PLT RSEL RDAT RIN Z180 ACR ; DESC .DB $01, $9A, $9B, $9A, $FF, $9C ; SBC W/ SCG - .DW HWSTR_SCG -; + .DW HWSTR_SCG +; .DB $04, $9C, $9D, $9C, $40, $FF ; N8 W/ ONBOARD PSG - .DW HWSTR_N8 -; + .DW HWSTR_N8 +; .DB $05, $9A, $9B, $9A, $40, $9C ; MK4 W/ SCG - .DW HWSTR_SCG -; + .DW HWSTR_SCG +; .DB $07, $D8, $D0, $D8, $FF, $FF ; RCZ80 W/ RC SOUND MODULE (EB) - .DW HWSTR_RCEB -; + .DW HWSTR_RCEB +; .DB $07, $D1, $D0, $D0, $FF, $FF ; RCZ80 W/ RC SOUND MODULE (MF) .DW HWSTR_RCMF -; +; .DB $08, $68, $60, $68, $C0, $FF ; RCZ180 W/ RC SOUND MODULE (EB) - .DW HWSTR_RCEB -; + .DW HWSTR_RCEB +; .DB $08, $61, $60, $60, $C0, $FF ; RCZ180 W/ RC SOUND MODULE (MF) .DW HWSTR_RCMF ; .DB $09, $D8, $D0, $D8, $FF, $FF ; EZZ80 W/ RC SOUND MODULE (EB) - .DW HWSTR_RCEB + .DW HWSTR_RCEB ; .DB $09, $D1, $D0, $D0, $FF, $FF ; EZZ80 W/ RC SOUND MODULE (EB) .DW HWSTR_RCMF @@ -765,10 +765,10 @@ CMRSAV .DB 0 ; for saving original Z180 CMR value ; DMA .DW 0 ; Working DMA FILTYP .DB 0 ; Sound file type (TYPPT2, TYPPT3, TYPMYM) -; +; TMP .DB 0 ; work around use of undocumented Z80 ; - + MSGBAN .DB "Tune Player for RomWBW v2.5, 29-Mar-2020",0 MSGUSE .DB "Copyright (C) 2020, Wayne Warthen, GNU GPL v3",13,10 .DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10 @@ -843,7 +843,7 @@ Id .EQU 1 ;into RAM or INIT subprogram was not called before. ;Call MUTE or INIT one more time to mute sound after stopping -;playing +;playing ;ORG $C000 ;Test codes (commented) @@ -1128,7 +1128,7 @@ TP_2 LD A,H #IF CurPosCounter LD (CurPos),A #ENDIF - + #ENDIF LD HL,VARS @@ -1441,7 +1441,7 @@ PD_VOL RRCA RRCA LD (IX-12+Volume),A JR PD_LP2 - + PD_EOff LD (IX-12+Env_En),A LD (IX-12+PsInOr),A JR PD_LP2 @@ -1660,7 +1660,7 @@ C_DELAY LD A,(BC) INC BC LD (Delay),A RET - + SETENV LD (IX-12+Env_En),E LD (AYREGS+EnvTp),A LD A,(BC) @@ -1783,7 +1783,7 @@ CH_SMPS LD (IX+PsInSm),A ;Convert PT2 sample to PT3 ;PT2 PT3 SamCnv POP HL ;BIT 2,C JR e_ - POP HL + POP HL LD H,B JR NZ,$+8 EX DE,HL @@ -2137,7 +2137,7 @@ ABC LD HL,AYREGS LOUT OUT (C),A LD B,E - OUTI + OUTI LD B,D INC A CP 13 @@ -2158,7 +2158,7 @@ LOUT OUT (C),A LD HL,AYREGS LOUT OUT (C),A INC C - OUTI + OUTI DEC C INC A CP 13 @@ -2197,7 +2197,7 @@ LOUT2 EI RET ; And done #ENDIF - + #IF ACBBAC CHTABLE .EQU $-4 .DB 4,5,15,%001001,0,7,7,%100100 @@ -2518,7 +2518,7 @@ endext: ld (dest1),ix ld bc,(rows) or a sbc hl,bc - + ; jr c,noend ; If rows>played rows then exit ; exx ; Otherwise restart ; ld e,1 @@ -2593,7 +2593,7 @@ notrig: ld hl,(psource) ld (played),a endint: call NORMIO - ei + ei ret ; And done ; ; *** Program data From d156aba1f9b6d9feed0aa3bc2a42da3c98e237ca Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Sat, 25 Apr 2020 16:57:54 +1000 Subject: [PATCH 07/13] tune.com: Updated to support using HBIOS sound driver A new command line switch has been added '--hbios'. Using this switch after the filename, will cause tune.com to play thru the HBIOS sound driver MYM file types are not supported thru HBIOS yet. --- Source/Apps/Tune/Build.cmd | 6 +- Source/Apps/Tune/Makefile | 14 +- Source/Apps/Tune/Tune.asm | 516 +++++++++++++--------------------- Source/Apps/Tune/cli.inc | 33 +++ Source/Apps/Tune/cpm.inc | 4 + Source/Apps/Tune/hbios.inc | 15 + Source/Apps/Tune/printing.inc | 175 ++++++++++++ Source/Apps/Tune/strings.inc | 39 +++ Source/Apps/Tune/timing.inc | 60 ++++ Source/Apps/Tune/tune.inc | 4 + Tools/Makefile.inc | 20 +- 11 files changed, 551 insertions(+), 335 deletions(-) create mode 100644 Source/Apps/Tune/cli.inc create mode 100644 Source/Apps/Tune/cpm.inc create mode 100644 Source/Apps/Tune/hbios.inc create mode 100644 Source/Apps/Tune/printing.inc create mode 100644 Source/Apps/Tune/strings.inc create mode 100644 Source/Apps/Tune/timing.inc create mode 100644 Source/Apps/Tune/tune.inc diff --git a/Source/Apps/Tune/Build.cmd b/Source/Apps/Tune/Build.cmd index 568f73dc..45186edc 100644 --- a/Source/Apps/Tune/Build.cmd +++ b/Source/Apps/Tune/Build.cmd @@ -5,9 +5,11 @@ set TOOLS=../../../Tools set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 -tasm -t180 -g3 -fFF Tune.asm Tune.com Tune.lst +tasm -t180 -g3 -fFF -dWBW Tune.asm Tune.com Tune.lst +tasm -t180 -g3 -fFF -dZX Tune.asm Tunezx.com Tune.lst +tasm -t180 -g3 -fFF -dMSX Tune.asm Tunemsx.com Tune.lst if errorlevel 1 goto :eof -copy /Y Tune.com ..\..\..\Binary\Apps\ +copy /Y Tune*.com ..\..\..\Binary\Apps\ copy /Y Tunes\*.* ..\..\..\Binary\Apps\Tunes\ \ No newline at end of file diff --git a/Source/Apps/Tune/Makefile b/Source/Apps/Tune/Makefile index 3aa5c338..cbca69a5 100644 --- a/Source/Apps/Tune/Makefile +++ b/Source/Apps/Tune/Makefile @@ -1,11 +1,19 @@ -OBJECTS = Tune.com +OBJECTS = Tune.com Tunezx.com Tunemsx.com DEST = ../../../Binary/Apps TOOLS = ../../../Tools include $(TOOLS)/Makefile.inc -Tune.com: Tune.asm - $(TASM) Tune.asm Tune.com +DEPS := Tune.asm $(shell find . -name '*.inc') + +Tune.com: $(DEPS) + $(TASM) -dWBW Tune.asm Tune.com + +Tunezx.com: $(DEPS) + $(TASM) -dZX Tune.asm Tunezx.com + +Tunemsx.com: $(DEPS) + $(TASM) -dMSX Tune.asm Tunemsx.com all:: mkdir -p $(DEST)/Tunes diff --git a/Source/Apps/Tune/Tune.asm b/Source/Apps/Tune/Tune.asm index 60ef8d38..f669387b 100644 --- a/Source/Apps/Tune/Tune.asm +++ b/Source/Apps/Tune/Tune.asm @@ -39,6 +39,7 @@ ; 2019-11-21 [WBW] Added table-driven configuration ; 2020-02-11 [WBW] Made hardware config & detection more flexible ; 2020-03-29 [WBW] Fix error in Z180 I/O W/S bracketing +; 2020-04-25 [DEN] Added support to use HBIOS Sound driver ;_______________________________________________________________________________ ; ; ToDo: @@ -49,43 +50,65 @@ ; Main program ;=============================================================================== ; -RESTART .EQU $0000 ; CP/M restart vector -BDOS .EQU $0005 ; BDOS invocation vector -; -IDENT .EQU $FFFE ; loc of RomWBW HBIOS ident ptr -; -RMJ .EQU 3 ; intended CBIOS version - major -RMN .EQU 1 ; intended CBIOS version - minor -; -BF_SYSVER .EQU $F1 ; BIOS: VER function -BF_SYSGET .EQU $F8 ; HBIOS: SYSGET function -; -FCB .EQU $5C ; Location of default FCB -; +#include "hbios.inc" +#include "cpm.inc" +#include "tune.inc" + HEAPEND .EQU $C000 ; End of heap storage ; TYPPT2 .EQU 1 ; FILTYP value for PT2 sound file TYPPT3 .EQU 2 ; FILTYP value for PT3 sound file TYPMYM .EQU 3 ; FILTYP value for MYM sound file ; -; -; + +;Conditional assembly - use -D switch on TASM or uz80as assembler to control +_ZX .EQU 0 ; 1) Version of ROUT (ZX or MSX standards) +_MSX .EQU 0 +_WBW .EQU 0 +HBIOS .EQU 0 +#IFDEF ZX +_ZX .SET 1 +FAIL +#ELSE +#IFDEF MSX +_MSX .SET 1 +FAIL +#ELSE +_WBW .SET 1 + +#ENDIF +#ENDIF + +CurPosCounter .EQU 0 ; 2) Current position counter at (START+11) +ACBBAC .EQU 0 ; 3) Allow channels allocation bits at (START+10) +LoopChecker .EQU 1 ; 4) Allow loop checking and disabling +Id .EQU 1 ; 5) Insert official identificator +#DEFINE Release "1" ; Release number + .ORG $0100 ; - CALL CRLF - LD DE,MSGBAN ; Point to banner message - CALL PRTSTR ; Print message -; + PRTCRLF + PRTSTRDE(MSGBAN) ; Print to banner message + + CALL CLI_ABRT_IF_OPT_FIRST + CALL CLI_HAVE_HBIOS_SWITCH + JP CONTINUE + +CONTINUE: ; Check BIOS and version CALL IDBIO ; Identify hardware BIOS CP 1 ; RomWBW HBIOS? - JP NZ,ERRBIO ; If not, handle BIOS error - LD A,RMJ << 4 | RMN ; Expected HBIOS ver + JP NZ, ERRBIO ; If not, handle BIOS error + LD A, RMJ << 4 | RMN ; Expected HBIOS ver CP D ; Compare with result above - JP NZ,ERRBIO ; Handle BIOS error - LD A,L ; Platform id to A + JP NZ, ERRBIO ; Handle BIOS error + LD A, L ; Platform id to A LD (CURPLT),A ; Save as current platform id -; + + LD A, (HBIOSMD) + OR A + JR NZ, TSTTIMER ; skip hardware check if using hbios + LD HL,CFGTBL ; Point to start of config table CFGSEL: LD A,$FF ; End of table marker @@ -137,21 +160,9 @@ MAT: LD DE,(DESC) ; Load hardware description pointer CALL PRTSTR ; Print description ; - ; Test for timer running to determine if it can be used for delay - LD B,BF_SYSGET ; HBIOS: GET function - LD C,$D0 ; TIMER subfunction - RST 08 ; DE:HL := current tick count - LD A,L ; DE:HL == 0? - OR H - OR E - OR D - LD A,0 ; Assume no timer - LD DE,MSGDLY ; Delay mode msg - JR Z,SETDLY ; If tick count is zero, no timer active - LD A,$FF ; Value for timer active - LD DE,MSGTIM ; Timer mode msg -SETDLY: - LD (WMOD),A ; Save wait mode + +TSTTIMER: + CALL PROBETIMER CALL PRTSTR ; Print it ; ; Get CPU speed & type from RomWBW HBIOS and compute quark delay factor @@ -214,6 +225,8 @@ CHKMYM LD A,(FCB+9) ; Extension char 1 _SET LD A,C ; Get file type value LD (FILTYP),A ; Save file type value ; + CALL CLI_ABRT_UNSUPPFILTYP + ; Load sound file _LD0 LD C,15 ; CPM Open File function LD DE,FCB ; FCB @@ -327,43 +340,12 @@ EXIT CALL START+8 ; Mute audio CALL PRTSTR ; Print message CALL CRLF ; Formatting JP 0 ; Exit the easy way -; -; Wait for quark play time. Can use hardware timer if -; supported by hardware or simple delay loop otherwise. -; Delay loop requires QDLY to be pre-set to to achieve -; optimal 20ms wait time. -; -WAITQ LD A,(WMOD) ; Get delay mode - OR A ; Set flags - JR Z,DLY ; Delay mode -; - ; Timer loop - CALL TIM2 ; Read timer LSB into A - LD C,A ; Init prev value -TIM1 PUSH BC ; Save prev value - CALL TIM2 ; Read timer LSB into A - POP BC ; Recover prev value - CP C ; Compare to prev - RET NZ ; Done if changed - JR TIM1 ; Else, loop -; -TIM2 LD B,$F8 ; BIOS SYSGET function - LD C,$D0 ; TIMER sub-function - RST 08 ; Call BIOS - LD A,L ; MSB to A - RET ; Return to loop -; - ; Delay spin loop (40 tstates per loop) -DLY LD BC,(QDLY) ; Load quark delay factor -DLY1 DEC BC ; [6] - NOP ; [4] - NOP ; [4] - NOP ; [4] - NOP ; [4] - LD A,B ; [4] - OR C ; [4] - JP NZ,DLY1 ; [10] - RET + +#include "timing.inc" +#include "strings.inc" +#include "cli.inc" +#include "printing.inc" + ; ; Get a keystroke from CPM ; @@ -482,190 +464,7 @@ NORMIO: LD A,(DCSAV) ; Get saved DCNTL value OUT (C),A ; And restore it RET -; -; Print character in A without destroying any registers -; -PRTCHR: - PUSH BC ; save registers - PUSH DE - PUSH HL - LD E,A ; character to print in E - LD C,$02 ; BDOS function to output a character - CALL BDOS ; do it - POP HL ; restore registers - POP DE - POP BC - RET -; -PRTDOT: -; - ; shortcut to print a dot preserving all regs - PUSH AF ; save af - LD A,'.' ; load dot char - CALL PRTCHR ; print it - POP AF ; restore af - RET ; done -; -PRTCR: -; - ; shortcut to print a dot preserving all regs - PUSH AF ; save af - LD A,13 ; load CR value - CALL PRTCHR ; print it - POP AF ; restore af - RET ; done -; -; Print a zero terminated string at (DE) without destroying any registers -; -PRTSTR: - PUSH DE -; -PRTSTR1: - LD A,(DE) ; get next char - OR A - JR Z,PRTSTR2 - CALL PRTCHR - INC DE - JR PRTSTR1 -; -PRTSTR2: - POP DE ; restore registers - RET -; -; Print the value in A in hex without destroying any registers -; -PRTHEX: - PUSH AF ; save AF - PUSH DE ; save DE - CALL HEXASCII ; convert value in A to hex chars in DE - LD A,D ; get the high order hex char - CALL PRTCHR ; print it - LD A,E ; get the low order hex char - CALL PRTCHR ; print it - POP DE ; restore DE - POP AF ; restore AF - RET ; done -; -; print the hex word value in bc -; -PRTHEXWORD: - PUSH AF - LD A,B - CALL PRTHEX - LD A,C - CALL PRTHEX - POP AF - RET -; -; print the hex dword value in de:hl -; -PRTHEX32: - PUSH BC - PUSH DE - POP BC - CALL PRTHEXWORD - PUSH HL - POP BC - CALL PRTHEXWORD - POP BC - RET -; -; Convert binary value in A to ascii hex characters in DE -; -HEXASCII: - LD D,A ; save A in D - CALL HEXCONV ; convert low nibble of A to hex - LD E,A ; save it in E - LD A,D ; get original value back - RLCA ; rotate high order nibble to low bits - RLCA - RLCA - RLCA - CALL HEXCONV ; convert nibble - LD D,A ; save it in D - RET ; done -; -; Convert low nibble of A to ascii hex -; -HEXCONV: - AND $0F ; low nibble only - ADD A,$90 - DAA - ADC A,$40 - DAA - RET -; -; Print value of A or HL in decimal with leading zero suppression -; Use prtdecb for A or prtdecw for HL -; -PRTDECB: - PUSH HL - LD H,0 - LD L,A - CALL PRTDECW ; print it - POP HL - RET -; -PRTDECW: - PUSH AF - PUSH BC - PUSH DE - PUSH HL - CALL PRTDEC0 - POP HL - POP DE - POP BC - POP AF - RET -; -PRTDEC0: - LD E,'0' - LD BC,-10000 - CALL PRTDEC1 - LD BC,-1000 - CALL PRTDEC1 - LD BC,-100 - CALL PRTDEC1 - LD C,-10 - CALL PRTDEC1 - LD E,0 - LD C,-1 -PRTDEC1: - LD A,'0' - 1 -PRTDEC2: - INC A - ADD HL,BC - JR C,PRTDEC2 - SBC HL,BC - CP E - RET Z - LD E,0 - CALL PRTCHR - RET -; -; Start a new line -; -CRLF2: - CALL CRLF ; two of them -CRLF: - PUSH AF ; preserve AF - LD A,13 ; - CALL PRTCHR ; print it - LD A,10 ; - CALL PRTCHR ; print it - POP AF ; restore AF - RET -; -; ADD HL,A -; -; A REGISTER IS DESTROYED! -; -ADDHLA: - ADD A,L - LD L,A - RET NC - INC H - RET + ; ERRBIO: ; Invalid BIOS or version LD DE,MSGBIO @@ -767,13 +566,15 @@ DMA .DW 0 ; Working DMA FILTYP .DB 0 ; Sound file type (TYPPT2, TYPPT3, TYPMYM) ; TMP .DB 0 ; work around use of undocumented Z80 -; -MSGBAN .DB "Tune Player for RomWBW v2.5, 29-Mar-2020",0 +HBIOSOPT: .DB "--HBIOS", 0 +HBIOSMD .DB 0 ; NON-ZERO IF USING HBIOS SOUND DRIVER, ZERO OTHERWISE + +MSGBAN .DB "Tune Player for RomWBW v3.1, 25-Apr-2020",0 MSGUSE .DB "Copyright (C) 2020, Wayne Warthen, GNU GPL v3",13,10 .DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10 .DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10 - .DB "Usage: TUNE .[PT2|PT3|MYM]",0 + .DB "Usage: TUNE .[PT2|PT3|MYM] [--hbios]",0 MSGBIO .DB "Incompatible BIOS or version, " .DB "HBIOS v", '0' + RMJ, ".", '0' + RMN, " required",0 MSGPLT .DB "Hardware error, system not supported!",0 @@ -785,11 +586,14 @@ MSGTIM .DB ", timer mode",0 MSGDLY .DB ", delay mode",0 MSGPLY .DB "Playing...",0 MSGEND .DB " Done",0 +MSGERR .DB "App Error", 0 ; HWSTR_SCG .DB "SCG ECB Board",0 HWSTR_N8 .DB "N8 Onboard Sound",0 HWSTR_RCEB .DB "RC2014 Sound Module (EB)",0 HWSTR_RCMF .DB "RC2014 Sound Module (MF)",0 + +MSGUNSUP .db "MYM FILES NOT SUPPORTED YET\r\n", 0 ; ;=============================================================================== ; PTx Player Routines @@ -799,23 +603,6 @@ HWSTR_RCMF .DB "RC2014 Sound Module (MF)",0 ;(c)2004-2007 S.V.Bulba ;http://bulba.untergrund.net (http://bulba.at.kz) -;Release number -;Release .EQU "1" -#DEFINE Release "1" - -;Conditional assembly -;1) Version of ROUT (ZX or MSX standards) -ZX .EQU 0 -MSX .EQU 0 -WBW .EQU 1 -;2) Current position counter at (START+11) -CurPosCounter .EQU 0 -;3) Allow channels allocation bits at (START+10) -ACBBAC .EQU 0 -;4) Allow loop checking and disabling -LoopChecker .EQU 1 -;5) Insert official identificator -Id .EQU 1 ;Features ;-------- @@ -2130,7 +1917,7 @@ RxCA2 OR E ABC #ENDIF -#IF ZX +#IF _ZX XOR A LD DE,$FFBF LD BC,$FFFD @@ -2151,7 +1938,7 @@ LOUT OUT (C),A RET #ENDIF -#IF MSX +#IF _MSX ;MSX version of ROUT (c)Dioniso XOR A LD C,$A0 @@ -2172,30 +1959,111 @@ LOUT OUT (C),A RET #ENDIF -#IF WBW +#IF _WBW + ISHBIOS + JR NZ, PLAYVIAHBIOS + DI - CALL SLOWIO - LD DE,(PORTS) ; D := RDAT, E := RSEL - XOR A ; start with reg 0 - LD C,E ; point to address port - LD HL,AYREGS ; start of value list -LOUT OUT (C),A ; select register - LD C,D ; point to data port - OUTI ; write (HL) to data port, bump HL - LD C,E ; point to address port - INC A ; next register - CP 13 ; reg 13? - JR NZ,LOUT ; if not, loop - OUT (C),A ; select register 13 - LD A,(HL) ; get value for register 13 - AND A ; set flags - JP M,LOUT2 ; if bit 7 set, return w/o writing value - LD C,D ; select data port - OUT (C),A ; write value to register 13 + CALL SLOWIO + LD DE, (PORTS) ; D := RDAT, E := RSEL + XOR A ; START WITH REG 0 + LD C, E ; POINT TO ADDRESS PORT + LD HL, AYREGS ; START OF VALUE LIST +LOUT OUT (C), A ; SELECT REGISTER + LD C, D ; POINT TO DATA PORT + OUTI ; WRITE (HL) TO DATA PORT, BUMP HL + LD C, E ; POINT TO ADDRESS PORT + INC A ; NEXT REGISTER + CP 13 ; REG 13? + JR NZ, LOUT ; IF NOT, LOOP + OUT (C), A ; SELECT REGISTER 13 + LD A, (HL) ; GET VALUE FOR REGISTER 13 + AND A ; SET FLAGS + JP M, LOUT2 ; IF BIT 7 SET, RETURN W/O WRITING VALUE + LD C, D ; SELECT DATA PORT + OUT (C), A ; WRITE VALUE TO REGISTER 13 LOUT2 - CALL NORMIO + CALL NORMIO EI - RET ; And done + RET ; AND DONE + +PLAYVIAHBIOS: + LD B, BF_SNDVOL + LD C, 0 + LD H, 0 + LD A, (AYREGS + AmplA) + AND $0F + rlca + rlca + rlca + rlca + LD L, A + RST 08 + + LD B, BF_SNDPIT + LD C, 0 + LD HL, (AYREGS+TonA) + ld a, h + AND $3F + LD H, A + RST 08 + + LD B, BF_SNDPLAY + LD C, 0 + LD D, 0 + RST 08 + + LD B, BF_SNDVOL + LD C, 0 + LD H, 0 + LD A, (AYREGS + AmplB) + AND $0F + rlca + rlca + rlca + rlca + LD L, A + RST 08 + + LD B, BF_SNDPIT + LD C, 0 + LD HL, (AYREGS+TonB) + ld a, h + AND $3F + LD H, A + RST 08 + + LD B, BF_SNDPLAY + LD C, 0 + LD D, 1 + RST 08 + + LD B, BF_SNDVOL + LD C, 0 + LD H, 0 + LD A, (AYREGS + AmplC) + AND $0F + rlca + rlca + rlca + rlca + LD L, A + RST 08 + + LD B, BF_SNDPIT + LD C, 0 + LD HL, (AYREGS+TonC) + ld a, h + AND $3F + LD H, A + RST 08 + + LD B, BF_SNDPLAY + LD C, 0 + LD D, 2 + RST 08 + + RET #ENDIF #IF ACBBAC @@ -2553,9 +2421,16 @@ zero: djnz onebit ret ; *** Update PSG registers -upsg: ld a,(WMOD) ; if WMOD = 1, CPU is z180 +upsg: + ISHBIOS + JR Z, upsg0 + ERRWITHMSG(MSGERR) + +upsg0: + ld a,(WMOD) ; if WMOD = 1, CPU is z180 or a ; set flags jr z,upsg1 ; skip z180 stuff + di call SLOWIO @@ -2563,29 +2438,29 @@ upsg1: ld hl,(psource) ld de,(PORTS) ; E := RSEL, D := RDAT xor a -psglp: ld c,e ; C := RSEL - out (c),a ; Select register - ld c,d ; C := RDAT +psglp: ld c, e ; C := RSEL + out (c), a ; Select register + ld c, d ; C := RDAT outi ; Set register value - inc a ; Next register - ld bc,(3*FRAG)-1 ; Bytes to skip before next reg-1 - add hl,bc ; Update HL - cp REGS-1 ; Check for next to last register? - jr nz,psglp ; If not, loop + inc a ; Next register + + ld bc, (3 * FRAG) - 1 ; Bytes to skip before next reg-1 + add hl, bc ; Update HL + cp REGS-1 ; Check for next to last register? + jr nz,psglp ; If not, loop - ld a,$FF ; Prepare to check for $FF value + ld a, $FF ; Prepare to check for $FF value cp (hl) ; If last reg (13) is $FF - jr z,notrig ; ... then don't output - ld a,13 ; Register 13 - ld c,e ; C := RSEL - out (c),a ; Select register - ld c,d ; C := RDAT + jr z, notrig ; ... then don't output + ld a, 13 ; Register 13 + ld c, e ; C := RSEL + out (c), a ; Select register + ld c, d ; C := RDAT outi ; Set register value -notrig: ld hl,(psource) +notrig: ld hl,(psource) inc hl ld (psource),hl - ld a,(played) or a jr z,endint @@ -2596,6 +2471,7 @@ endint: call NORMIO ei ret ; And done ; + ; *** Program data played .db 0 ; VBI counter dest1 .dw 0 ; Uncompress destination 1 diff --git a/Source/Apps/Tune/cli.inc b/Source/Apps/Tune/cli.inc new file mode 100644 index 00000000..c8ac9b8c --- /dev/null +++ b/Source/Apps/Tune/cli.inc @@ -0,0 +1,33 @@ + + +CLI_ABRT_IF_OPT_FIRST: + LD A, (FCB+1) + CP '-' ; OPTION FIRST OR - MISSING FILENAME? + JP Z, ERRCMD ; SHOW USAGE + RET + +CLI_HAVE_HBIOS_SWITCH: + LD HL, CLIARGS ; TEST FOR --HBIOS ON COMNMAND LINE + LD DE, HBIOSOPT + CALL STRINDEX + JR NZ, CLI_HAVE_HBIOS_SWITCH1 + OR $FF ; IS NOT HBIOS + LD (HBIOSMD), A + RET +CLI_HAVE_HBIOS_SWITCH1: + AND 0 ; IS HBIOS + LD (HBIOSMD), A + RET + +CLI_ABRT_UNSUPPFILTYP: + PUSH AF + ISHBIOS + JR Z, CLI_ABRT_UNSUPPFILTYP1 + POP AF + CP TYPMYM + RET NZ + ERRWITHMSG(MSGUNSUP) ; EXIT WITH UNSUPPORTED FILE TYPE MESSAGE + +CLI_ABRT_UNSUPPFILTYP1: + POP AF + RET \ No newline at end of file diff --git a/Source/Apps/Tune/cpm.inc b/Source/Apps/Tune/cpm.inc new file mode 100644 index 00000000..a3c84af9 --- /dev/null +++ b/Source/Apps/Tune/cpm.inc @@ -0,0 +1,4 @@ +CLIARGS .EQU $81 +RESTART .EQU $0000 ; CP/M restart vector +BDOS .EQU $0005 ; BDOS invocation vector +FCB .EQU $5C ; Location of default FCB diff --git a/Source/Apps/Tune/hbios.inc b/Source/Apps/Tune/hbios.inc new file mode 100644 index 00000000..874a9699 --- /dev/null +++ b/Source/Apps/Tune/hbios.inc @@ -0,0 +1,15 @@ +IDENT .EQU $FFFE ; loc of RomWBW HBIOS ident ptr +; +RMJ .EQU 3 ; intended CBIOS version - major +RMN .EQU 1 ; intended CBIOS version - minor +; +BF_SYSVER .EQU $F1 ; BIOS: VER function +BF_SYSGET .EQU $F8 ; HBIOS: SYSGET function +; + +BF_SND .EQU $50 +BF_SNDRESET .EQU BF_SND + 0 ; RESET SOUND SYSTEM +BF_SNDVOL .EQU BF_SND + 1 ; REQUEST SOUND VOL - D IS CHANNEL, E CONTAINS VOLUME (255 MAX, 0 SILENT) - SCALED AS REQUIRED BY DRIVER (EG: MAPS TO JUST 4 BIT RESOLUTION FOR SN76489) +BF_SNDPIT .EQU BF_SND + 2 ; REQUEST SOUND PITCH - D IS CHANNEL, HL CONTAINS PITCH (0 LOWEST NOTE, FFFF HIGHEST NOTE) - SCALED BY DRIVER (EG: MAPS TO JUST 10 BITS FOR SN76489 ) +BF_SNDPLAY .EQU BF_SND + 4 ; INITIATE THE REQUESTED SOUND COMMAND +BF_SNDQUERY .EQU BF_SND + 5 ; D IS CHANNEL, E IS SUBCOMMAND diff --git a/Source/Apps/Tune/printing.inc b/Source/Apps/Tune/printing.inc new file mode 100644 index 00000000..8a6b4e9a --- /dev/null +++ b/Source/Apps/Tune/printing.inc @@ -0,0 +1,175 @@ +; +; Print character in A without destroying any registers +; +PRTCHR: + PUSH BC ; save registers + PUSH DE + PUSH HL + LD E,A ; character to print in E + LD C,$02 ; BDOS function to output a character + CALL BDOS ; do it + POP HL ; restore registers + POP DE + POP BC + RET +; +PRTDOT: +; + ; shortcut to print a dot preserving all regs + PUSH AF ; save af + LD A,'.' ; load dot char + CALL PRTCHR ; print it + POP AF ; restore af + RET ; done +; +PRTCR: +; + ; shortcut to print a dot preserving all regs + PUSH AF ; save af + LD A,13 ; load CR value + CALL PRTCHR ; print it + POP AF ; restore af + RET ; done +; +; Print a zero terminated string at (DE) without destroying any registers +; +PRTSTR: + PUSH DE +; +PRTSTR1: + LD A,(DE) ; get next char + OR A + JR Z,PRTSTR2 + CALL PRTCHR + INC DE + JR PRTSTR1 +; +PRTSTR2: + POP DE ; restore registers + RET +; +; Print the value in A in hex without destroying any registers +; +PRTHEX: + PUSH AF ; save AF + PUSH DE ; save DE + CALL HEXASCII ; convert value in A to hex chars in DE + LD A,D ; get the high order hex char + CALL PRTCHR ; print it + LD A,E ; get the low order hex char + CALL PRTCHR ; print it + POP DE ; restore DE + POP AF ; restore AF + RET ; done +; +; print the hex word value in bc +; +PRTHEXWORD: + PUSH AF + LD A,B + CALL PRTHEX + LD A,C + CALL PRTHEX + POP AF + RET +; +; print the hex dword value in de:hl +; +PRTHEX32: + PUSH BC + PUSH DE + POP BC + CALL PRTHEXWORD + PUSH HL + POP BC + CALL PRTHEXWORD + POP BC + RET +; +; Convert binary value in A to ascii hex characters in DE +; +HEXASCII: + LD D,A ; save A in D + CALL HEXCONV ; convert low nibble of A to hex + LD E,A ; save it in E + LD A,D ; get original value back + RLCA ; rotate high order nibble to low bits + RLCA + RLCA + RLCA + CALL HEXCONV ; convert nibble + LD D,A ; save it in D + RET ; done + +; +; Convert low nibble of A to ascii hex +; +HEXCONV: + AND $0F ; low nibble only + ADD A,$90 + DAA + ADC A,$40 + DAA + RET + +; +; Print value of A or HL in decimal with leading zero suppression +; Use prtdecb for A or prtdecw for HL +; +PRTDECB: + PUSH HL + LD H,0 + LD L,A + CALL PRTDECW ; print it + POP HL + RET +; +PRTDECW: + PUSH AF + PUSH BC + PUSH DE + PUSH HL + CALL PRTDEC0 + POP HL + POP DE + POP BC + POP AF + RET +; +PRTDEC0: + LD E,'0' + LD BC,-10000 + CALL PRTDEC1 + LD BC,-1000 + CALL PRTDEC1 + LD BC,-100 + CALL PRTDEC1 + LD C,-10 + CALL PRTDEC1 + LD E,0 + LD C,-1 +PRTDEC1: + LD A,'0' - 1 +PRTDEC2: + INC A + ADD HL,BC + JR C,PRTDEC2 + SBC HL,BC + CP E + RET Z + LD E,0 + CALL PRTCHR + RET +; +; Start a new line +; +CRLF2: + CALL CRLF ; two of them +CRLF: + PUSH AF ; preserve AF + LD A,13 ; + CALL PRTCHR ; print it + LD A,10 ; + CALL PRTCHR ; print it + POP AF ; restore AF + RET diff --git a/Source/Apps/Tune/strings.inc b/Source/Apps/Tune/strings.inc new file mode 100644 index 00000000..5df10276 --- /dev/null +++ b/Source/Apps/Tune/strings.inc @@ -0,0 +1,39 @@ +STRINDEX: ; SEARCH FOR STRING AT DE WITHIN STRING AT HL + + LD B, 0 + LD C, 0 + +TRYNEXT: + PUSH HL + PUSH DE + CALL STRCMP + POP DE + POP HL + RET Z + + INC HL + INC BC + LD A, (HL) + OR A + JR NZ, TRYNEXT + + OR $FF ; RETURN NZ + RET + +STRCMP: ; COMPARE STRING AT HL WITH DE - RETURN Z IF LIKE + LD A, (DE) + OR A + RET Z + + LD B, A + LD A, (HL) + OR A + JR NZ, STRCMP1 + OR $FF ; END OF STRING HL - SO NOT FOUND + RET +STRCMP1 + CP B + RET NZ + INC HL + INC DE + JR STRCMP diff --git a/Source/Apps/Tune/timing.inc b/Source/Apps/Tune/timing.inc new file mode 100644 index 00000000..857e4d2c --- /dev/null +++ b/Source/Apps/Tune/timing.inc @@ -0,0 +1,60 @@ + +; +; Wait for quark play time. Can use hardware timer if +; supported by hardware or simple delay loop otherwise. +; Delay loop requires QDLY to be pre-set to to achieve +; optimal 20ms wait time. +; +WAITQ LD A,(WMOD) ; Get delay mode + OR A ; Set flags + JR Z,DLY ; Delay mode +; + ; Timer loop + CALL TIM2 ; Read timer LSB into A + LD C,A ; Init prev value +TIM1 PUSH BC ; Save prev value + CALL TIM2 ; Read timer LSB into A + POP BC ; Recover prev value + CP C ; Compare to prev + RET NZ ; Done if changed + JR TIM1 ; Else, loop +; +TIM2 LD B,$F8 ; BIOS SYSGET function + LD C,$D0 ; TIMER sub-function + RST 08 ; Call BIOS + LD A,L ; MSB to A + RET ; Return to loop +; + ; Delay spin loop (40 tstates per loop) +DLY LD BC,(QDLY) ; Load quark delay factor +DLY1 DEC BC ; [6] + NOP ; [4] + NOP ; [4] + NOP ; [4] + NOP ; [4] + LD A,B ; [4] + OR C ; [4] + JP NZ,DLY1 ; [10] + RET + +; +; Test for timer running to determine if it can be used for delay +; Return string message in DE +; Assigned (WMOD) with 0 if no hardware time, 1 if hardware timer found +; +PROBETIMER: + LD B,BF_SYSGET ; HBIOS: GET function + LD C,$D0 ; TIMER subfunction + RST 08 ; DE:HL := current tick count + LD A,L ; DE:HL == 0? + OR H + OR E + OR D + LD A,0 ; Assume no timer + LD DE,MSGDLY ; Delay mode msg + JR Z,SETDLY ; If tick count is zero, no timer active + LD A,$FF ; Value for timer active + LD DE,MSGTIM ; Timer mode msg +SETDLY: + LD (WMOD),A ; Save wait mode + RET diff --git a/Source/Apps/Tune/tune.inc b/Source/Apps/Tune/tune.inc new file mode 100644 index 00000000..3db0e0e9 --- /dev/null +++ b/Source/Apps/Tune/tune.inc @@ -0,0 +1,4 @@ +#DEFINE ISHBIOS LD A, (HBIOSMD) \ OR A +#DEFINE PRTSTRDE(X) LD DE, X \ CALL PRTSTR +#DEFINE PRTCRLF CALL CRLF +#DEFINE ERRWITHMSG(X) LD DE, X \ JP ERR diff --git a/Tools/Makefile.inc b/Tools/Makefile.inc index 0de5bc5e..bccb2e26 100644 --- a/Tools/Makefile.inc +++ b/Tools/Makefile.inc @@ -24,7 +24,7 @@ RELPATH := $(subst $(TREEROOT),,$(HERE)) # # where's a copy of this tree for windows so we can diff binaries # -WINROOT = $(TREEROOT)/../RomWBW.windows +WINROOT = $(TREEROOT)/../RomWBW.windows DIFFTO := $(shell if [ -d $(WINROOT) ] ; then cd $(WINROOT); pwd; fi) DIFFPATH := $(DIFFTO)/$(RELPATH) @@ -57,7 +57,7 @@ CPM=$(TOOLS)/cpm/bin %.hex: %.asm $(ZXCC) $(CPM)/MAC -$< -$$PO ; \ - + %.bin: %.ASM $(ZXCC) $(CPM)/MAC -$< -$$PO $(ZXCC) $(CPM)/MLOAD25 -tmp.bin=$*.hex @@ -67,7 +67,7 @@ CPM=$(TOOLS)/cpm/bin %.com: %.z80 $(ZXCC) $(CPM)/Z80ASM -$(basename $<)/F ; \ mv $$($(CASEFN) $@) tmp.com ; mv tmp.com $@ - + %.bin: %.asm $(TASM) $< $@ @@ -77,10 +77,10 @@ CPM=$(TOOLS)/cpm/bin %.rel: %.z80 $(ZXCC) $(CPM)/Z80ASM -$(basename $<)/MF -%.hex: %.180 +%.hex: %.180 $(ZXCC) $(CPM)/SLR180 -$(basename $<)/HF -%.rel: %.azm +%.rel: %.azm $(ZXCC) $(CPM)/ZSM =$< %.bin: %.rel @@ -143,7 +143,7 @@ clobber:: clean # the same objects # diff:: -ifneq ($(DIFFTO),) +ifneq ($(DIFFTO),) @for dir in $(SUBDIRS) ; do \ ( echo "diff in $(HERE)/$$dir" ; cd "$$dir" ; make diff ) ; \ done @@ -166,8 +166,8 @@ ifneq ($(DIFFTO),) if [ ! -f "$$df" ] ; then echo $(DIFFPATH)/$$i missing ; fi ; \ fi ; \ done -endif - -vdiff: - make VERBOSEDIFF=2 diff +endif + +vdiff: + make VERBOSEDIFF=2 diff From 0381c72ca257c7743288db095dfa75de715b4c7e Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Sat, 25 Apr 2020 22:23:30 +1000 Subject: [PATCH 08/13] Fix issue with TMS interrupt support - some default configurations were missing --- Source/HBIOS/cfg_dyno.asm | 1 + Source/HBIOS/cfg_ezz80.asm | 1 + Source/HBIOS/cfg_rcz180.asm | 1 + Source/HBIOS/cfg_rcz80.asm | 1 + Source/HBIOS/cfg_scz180.asm | 1 + Source/HBIOS/cfg_zeta.asm | 1 + Source/HBIOS/cfg_zeta2.asm | 1 + 7 files changed, 7 insertions(+) diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index 132459e3..1322676b 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -90,6 +90,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) diff --git a/Source/HBIOS/cfg_ezz80.asm b/Source/HBIOS/cfg_ezz80.asm index e5425351..99e94ced 100644 --- a/Source/HBIOS/cfg_ezz80.asm +++ b/Source/HBIOS/cfg_ezz80.asm @@ -115,6 +115,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index ec13c61b..6a2b259d 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -118,6 +118,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index 7896465a..7682f2b7 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -124,6 +124,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index 3f72aefa..24abe9f0 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -113,6 +113,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index 13ecfb5d..865f2506 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -88,6 +88,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index d93e3e21..0109f702 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -98,6 +98,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) From c3e78ec8f5a8415bba0b74bd22c75d448e299a46 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 25 Apr 2020 10:48:35 -0700 Subject: [PATCH 09/13] Minor Cleanup --- Source/Apps/Tune/Build.cmd | 4 ++-- Source/HBIOS/hbios.asm | 8 ++++---- Source/HBIOS/std.asm | 2 +- Source/HBIOS/tms.asm | 9 ++++++++- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Source/Apps/Tune/Build.cmd b/Source/Apps/Tune/Build.cmd index 45186edc..82fa4c33 100644 --- a/Source/Apps/Tune/Build.cmd +++ b/Source/Apps/Tune/Build.cmd @@ -6,8 +6,8 @@ set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 tasm -t180 -g3 -fFF -dWBW Tune.asm Tune.com Tune.lst -tasm -t180 -g3 -fFF -dZX Tune.asm Tunezx.com Tune.lst -tasm -t180 -g3 -fFF -dMSX Tune.asm Tunemsx.com Tune.lst +tasm -t180 -g3 -fFF -dZX Tune.asm Tunezx.com Tunezx.lst +tasm -t180 -g3 -fFF -dMSX Tune.asm Tunemsx.com Tunemsx.lst if errorlevel 1 goto :eof diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index cc7fda0c..1120cebe 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -986,10 +986,6 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK ; ; MAKE SURE IM1 INT VECTOR IS RIGHT #IF (INTMODE == 1) - #IF (TMSTIMENABLE) - CALL TMS_INT_DIS ; SPECIAL CASE - NEED TO STOP TMS9918 FROM FIRING INTERRUPTS - #ENDIF ; WHEN DRIVER IS LOADED - IT WILL BE RELOADED - ; JP INT_IM1 IF INTERRUPT MODE ACTIVE LD A,$C3 LD ($0038),A @@ -1259,6 +1255,10 @@ HB_CPU2: ; #ENDIF ; +#IF (TMSENABLE) + CALL TMS_PREINIT +#ENDIF +; ; INITIALIZE HEAP STORAGE ; ; INITIALIZE POINTERS diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 15dfdb34..cbd8f0a3 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -186,7 +186,7 @@ AYMODE_RCZ180 .EQU 4 ; RC2014 SOUND MODULE BY ED BRINDLEY ON Z180 TMSMODE_NONE .EQU 0 TMSMODE_SCG .EQU 1 ; SCG ECB BOARD TMSMODE_N8 .EQU 2 ; N8 BUILT-IN VIDEO -TMSMODE_RC2014 .EQU 3 ; RC2014 BUILT-IN VIDEO +TMSMODE_RC .EQU 3 ; RC2014 BUILT-IN VIDEO ; ; SERIAL DEVICE CONFIGURATION CONSTANTS ; diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index e6c05c0c..14c50b3d 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -22,7 +22,7 @@ TMSINTEN: .EQU 5 ; INTERRUPT ENABLE BIT .ECHO "TMS INTERRUPTS ENABLED" #ENDIF -#IF (TMSMODE == TMSMODE_RC2014) +#IF (TMSMODE == TMSMODE_RC) TMS_DATREG .EQU $BE ; READ/WRITE DATA TMS_CMDREG .EQU $BF ; READ STATUS / WRITE REG SEL TMS_PPIA .EQU 0 ; PPI PORT A @@ -80,6 +80,13 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER ; TMS DRIVER - INITIALIZATION ;====================================================================== ; +TMS_PREINIT: +#IF (TMSTIMENABLE) + CALL TMS_INT_DIS ; SPECIAL CASE - NEED TO STOP TMS9918 FROM FIRING INTERRUPTS +#ENDIF ; WHEN DRIVER IS LOADED - IT WILL BE RELOADED + + RET +; TMS_INIT: #IF (CPUFAM == CPU_Z180) CALL TMS_Z180IO From 6d9172f635b20414258671c873094241578ee731 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Sun, 26 Apr 2020 10:27:19 +1000 Subject: [PATCH 10/13] Replace FAIL with git statusgit status! to force assembler to error --- Source/HBIOS/cvdu.asm | 2 +- Source/HBIOS/sn76489.asm | 2 +- Source/HBIOS/tms.asm | 2 +- Source/HBIOS/vdu.asm | 2 +- Source/HBIOS/vga.asm | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/HBIOS/cvdu.asm b/Source/HBIOS/cvdu.asm index 4b51dfa2..1ceb847d 100644 --- a/Source/HBIOS/cvdu.asm +++ b/Source/HBIOS/cvdu.asm @@ -96,7 +96,7 @@ CVDU_FNTBL: .DW KBD_READ #IF (($ - CVDU_FNTBL) != (VDA_FNCNT * 2)) .ECHO "*** INVALID CVDU FUNCTION TABLE ***\n" - FAIL + !!!!! #ENDIF CVDU_VDAINI: diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm index 18f7f649..3c12acb6 100644 --- a/Source/HBIOS/sn76489.asm +++ b/Source/HBIOS/sn76489.asm @@ -304,7 +304,7 @@ SN7_FNTBL: #IF (($ - SN7_FNTBL) != (SND_FNCNT * 2)) .ECHO "*** INVALID SND FUNCTION TABLE ***\n" - FAIL + !!!!! #ENDIF PENDING_PITCH diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 14c50b3d..b802d569 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -189,7 +189,7 @@ TMS_FNTBL: #ENDIF #IF (($ - TMS_FNTBL) != (VDA_FNCNT * 2)) .ECHO "*** INVALID TMS FUNCTION TABLE ***\n" - FAIL + !!!!! #ENDIF TMS_VDAINI: diff --git a/Source/HBIOS/vdu.asm b/Source/HBIOS/vdu.asm index 1c2a2ca1..2c057ca2 100644 --- a/Source/HBIOS/vdu.asm +++ b/Source/HBIOS/vdu.asm @@ -150,7 +150,7 @@ VDU_FNTBL: .DW PPK_READ #IF (($ - VDU_FNTBL) != (VDA_FNCNT * 2)) .ECHO "*** INVALID VDU FUNCTION TABLE ***\n" - FAIL + !!!!! #ENDIF VDU_VDAINI: diff --git a/Source/HBIOS/vga.asm b/Source/HBIOS/vga.asm index dde15dae..30bb2b4e 100644 --- a/Source/HBIOS/vga.asm +++ b/Source/HBIOS/vga.asm @@ -163,7 +163,7 @@ VGA_FNTBL: .DW KBD_READ #IF (($ - VGA_FNTBL) != (VDA_FNCNT * 2)) .ECHO "*** INVALID VGA FUNCTION TABLE ***\n" - FAIL + !!!!! #ENDIF VGA_VDAINI: From f7748cc6db8e933603561ad82ca1cebf0ae32768 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Sun, 26 Apr 2020 10:28:01 +1000 Subject: [PATCH 11/13] Tune.asm - removed typo 'FAIL' labels --- Source/Apps/Tune/Tune.asm | 2 -- 1 file changed, 2 deletions(-) diff --git a/Source/Apps/Tune/Tune.asm b/Source/Apps/Tune/Tune.asm index f669387b..aa28cb95 100644 --- a/Source/Apps/Tune/Tune.asm +++ b/Source/Apps/Tune/Tune.asm @@ -68,11 +68,9 @@ _WBW .EQU 0 HBIOS .EQU 0 #IFDEF ZX _ZX .SET 1 -FAIL #ELSE #IFDEF MSX _MSX .SET 1 -FAIL #ELSE _WBW .SET 1 From 392e729d57e025357853d32491b3071b901c50cd Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Sun, 26 Apr 2020 10:48:34 +1000 Subject: [PATCH 12/13] tms: Correctly implemented pre-init to disable interrupts --- Source/HBIOS/hbios.asm | 6 +++--- Source/HBIOS/tms.asm | 26 ++++++++------------------ 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 1120cebe..865e2005 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1255,9 +1255,6 @@ HB_CPU2: ; #ENDIF ; -#IF (TMSENABLE) - CALL TMS_PREINIT -#ENDIF ; ; INITIALIZE HEAP STORAGE ; @@ -1658,6 +1655,9 @@ HB_PCINITTBL: #IF (UFENABLE) .DW UF_PREINIT #ENDIF +#IF (TMSENABLE) + .DW TMS_PREINIT +#ENDIF HB_PCINITTBLLEN .EQU (($ - HB_PCINITTBL) / 2) ;================================================================================================== diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index b802d569..fb594f93 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -81,11 +81,12 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER ;====================================================================== ; TMS_PREINIT: -#IF (TMSTIMENABLE) - CALL TMS_INT_DIS ; SPECIAL CASE - NEED TO STOP TMS9918 FROM FIRING INTERRUPTS -#ENDIF ; WHEN DRIVER IS LOADED - IT WILL BE RELOADED - - RET + ; DISABLE INTERRUPT GENERATION + LD A, (TMS_INIT9918_REG_1) + RES TMSINTEN, A ; RESET INTERRUPT ENABLE BIT + LD (TMS_INIT9918_REG_1), A + LD C, TMSCTRL1 + JP TMS_SET ; TMS_INIT: #IF (CPUFAM == CPU_Z180) @@ -144,21 +145,10 @@ TMS_INIT1: XOR A ; SIGNAL SUCCESS RET -#IFDEF APPBOOT #IF TMSTIMENABLE - ; SPECIAL CASE FOR APPBOOT - NEEDING TO DISABLE INTERRUPT GENERATOR - ; ISSUE: - ; IF THE CURRENT ROMBOOT HAD LOADED THE TMS DRIVER - ; THEN THE ROMLOADER MAY START RECEIVING INTERRUPTS - ; FROM THE CHIP BEFORE THE TMS DRIVER HAS BEEN RE- - ; INITALISED, AND CAUSING BAD INT PANICS + ; DISABLE INTERRUPT TMS_INT_DIS: - LD A, (TMS_INIT9918_REG_1) - RES TMSINTEN, A ; RESET INTERRUPT ENABLE BIT - LD (TMS_INIT9918_REG_1), A - LD C, TMSCTRL1 - JP TMS_SET -#ENDIF + #ENDIF ; ;====================================================================== From 072f0f7562846b5ae7189149e25cbdedca5d4406 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 25 Apr 2020 19:42:43 -0700 Subject: [PATCH 13/13] Updated KERMIT applications with VT100 terminal support Provided by Jim McGinnis. --- Doc/ChangeLog.txt | 1 + .../u0/KERMIT.COM => d_cpm22/u0/KERCPM22.COM} | Bin 29440 -> 29696 bytes .../u0/KERMIT.COM => d_cpm3/u0/KERCPM3.COM} | Bin 29440 -> 29440 bytes .../d_nzcom/u0/{KERMIT.COM => KERCPM22.COM} | Bin 29440 -> 29696 bytes .../u0/KERMIT.COM => d_zpm3/u15/kercpm3.com} | Bin 29312 -> 29440 bytes .../kermit.com => d_zsdos/u0/KERCPM22.COM} | Bin 29312 -> 29696 bytes 6 files changed, 1 insertion(+) rename Source/Images/{d_zsdos/u0/KERMIT.COM => d_cpm22/u0/KERCPM22.COM} (95%) rename Source/Images/{d_cpm22/u0/KERMIT.COM => d_cpm3/u0/KERCPM3.COM} (96%) rename Source/Images/d_nzcom/u0/{KERMIT.COM => KERCPM22.COM} (95%) rename Source/Images/{d_cpm3/u0/KERMIT.COM => d_zpm3/u15/kercpm3.com} (96%) rename Source/Images/{d_zpm3/u15/kermit.com => d_zsdos/u0/KERCPM22.COM} (95%) diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index c2b35af5..3b10f0a5 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -13,6 +13,7 @@ Version 3.1 - DEN: Added SN76489 sound chip driver - M?O: RomWBW Disk Catalog document - DEN: Updated TMS to optionally trigger SYSTIMER interrupt (TMSTIMENABLE) +- J?M: Updated KERMIT applications with VT100 terminal support Version 3.0.1 ------------- diff --git a/Source/Images/d_zsdos/u0/KERMIT.COM b/Source/Images/d_cpm22/u0/KERCPM22.COM similarity index 95% rename from Source/Images/d_zsdos/u0/KERMIT.COM rename to Source/Images/d_cpm22/u0/KERCPM22.COM index b24df273d412a4a4428797ea2b9e4814a94acf0d..a3a9f3c29823c1df0aeb7436256ad281e7b33b3b 100644 GIT binary patch delta 859 zcmYk4Ur19?9LLXfv$pBPsX?`xw|0m^vbkR5no=%QG);6WWkF`wTIqJrIaf2wZT3*~ zAQYnqUwr5fg7i=rEa=Joki3H%jWFn;Y=mJFMUVL)o#UVAp5LDj=llD?{oVVEf0N?N z(sOGh_Jqz-xXoaa!8C&z2KN|DFu2bk#o#pqgoG_JSYYsu!4d-tg+&7I3A`a-5?Chi zo4_i8XBvFw5``}mvJ}2jSf=ok!moAn6R_)WmVl2!DQ(mde`?tuD@BDUaW_(abc_|` zo4IJzzoNNns98!~L%N79>wHkKxrgq%qwjyL)g1Rf)yz+c<;bbZa-n3nd%DdDw%ODn znv`)ZIqw=5XecY%ns4<1QO==cdVo{|O*Ct}bK@j8HInGpcEzTMrK@c8W%?Bv*_(Pq zGQ}`SGNB8~wD!R=f2cY&OAM*R%4d*Daz)JFX4-WZ)%h@zw4F12B$8y?1e<*e@-{%c zOS+JkI-!_HA-lq&*;PfC7Ul|Kc0T)TCTnE9Uhns4k+(Q+_(jS`4W|S5M#6oe%Y#(C zB=<$AjOFVg{fdmwI~`6(%izF8mCBJmS?lS&rs_=j|Bk9U4XNU;F4V8e;hq6i!J^IS zXcP5Za5~xrNlIc(3lx>nn}#?>)E{Tws6WOM?W8p}z$~r7HmosAFn9(tX6Xo2;31yc zD)0@F{P-5@$U&V}gmO?<4!UYZQ7f``K2+k&Z$XAKww}x)lAJep5TnW5NsOgACB{yR zxwFPU#hhlz)C@CB58-Akm_O(gPQPVMrki98kBu*8bAVA>)gk<3)!YM<7Pg1a1lKlO*flXmUV9vOab0I z+~(Dm*KBXj!LBOb{YW1gR-Wi)*l6aD`ySXyU8u|Y-_Rcf^(-sbPQoCK8(Dq3I|=T} z8RNF@8@UC}$-e2?+C8||Te$)C%~XPV=Dhk`|Kh9$1}hIi_$8~lUotJ)YcF9AytCZ; zt@mw%Ye)+R4iu@H54mROp%)urd?2?NWUCcFcS6x8G$%MMt60;l1RdWl7F>@P;r4MQY zPgyH^|6Qynrkj^59xhBjSP=8(C_a^I0X}B-SWEG5STAHd@2hqXtCO*U{$A8ct<$$*feks%sM0vRbO3r6u|QXe4^z#Qtzd?&=&bB(admU6g{s YpnNXT)oH!OqRG@{RkG8zGawoM2d%*pPyhe` diff --git a/Source/Images/d_cpm22/u0/KERMIT.COM b/Source/Images/d_cpm3/u0/KERCPM3.COM similarity index 96% rename from Source/Images/d_cpm22/u0/KERMIT.COM rename to Source/Images/d_cpm3/u0/KERCPM3.COM index b24df273d412a4a4428797ea2b9e4814a94acf0d..4882ea5098768f03320d5486c0781f1daa25109b 100644 GIT binary patch delta 861 zcmYjPUr19?7{8ZoxozZvmFX5pEiG-Pk}M_5f)!}|Gj z6|~o&2a%+Lih|K&_e0nn++vgkJyeS{w4$=N1nZnFp>w}KKfZtGyWe-Fm-y)={-HUZ zn8g}~pBQ)o4gwVfRxzw$_=UksKqA0#j9Lja5%3Y{AYjJu0l_N-X#~#^EF)M&u!i8i z3h${4Lk`1744*J8WB88YN1k>e7$Fcw;KLx{dxR?-Gsl&3$t&^Np|7g5*syT^FRHVI z>M8$3T-DF63S3iDY4JLPdSFFeZ~T1|1x|9Q zOboRENru!a%VlKICX=ITWnvDQj&GlOl6i_QR%smAo>AcHK zC&0TbOqLWGBSd^jCyaT%m|}Q~c;5OCSZy1?Q2?x$j7UQTa8b$J;tQ56Hsi&Gd1t~# zC-y9x({nX7HOrSa)s#6dJkoqv7wmE*9vhCHnZU}BG#tm0ES-;zpOxfOf?cp5o)|l= zU@1Ne*x;BFkXf2wKf>avL$LQT#0Qe=YA~?_PwMPr z$64h0Lz|+S$;El6nYEbH^Gi;pohD{B93-Vx5dDF^V0^=OG7ZFOq4uoqvC>EAk?2bD zNSw+4>@6mPy(jwHkL_&h3rW(}raDRT`RjWk<)Li!-oXB%_bM1EV#qn6jN%We1LM0a=R?khq}QuRCb4Cj;2yy Zx7?}36da96!QO^Y{q9B@mVDe<{ui!qN;v=k delta 760 zcmYk4T}TvB6vwYSyBX3hO_H^#%c!GdlIc9zm?EtpWgoJxN)*wyJH(bBbI#p@3SFUx zdgvh-dgvjDLW(HrL0IS^Y7fa?V}gY&SnVN5iG1y$ddOy0+q(B~{y*-y_rU$%JH1ji zy;AnvJCR<48l+E1KaqT#0-U}eeMeeFs^wJ0i7_{HPHmi8IQ4MKz(za*dRpWcK(BzF zn6w{BN9sg6fYgl?MmmIaxELBxf>S3@0Z0HVj=LE3BHOxVU7u)*ubP2!+sCve3~X_9 zQu}7gU%?h2-{NlmQDnnqdk*Syy#9gN-J{Kzb_WW!r;N!G3)WXcQL5G@xGpsyhn!l- zlFc1Wjo{BVKv%X7#DaX!ZI>7NH}iMfF9iJ*%gi5xE*iAP%w4`1__8Ohn`W^021p|< zle6=8;7V=w8ssY}4f*65{jvE$$~AXo?}G>_j&C8wc2cA3;2g-a+_|d!vY3~_QXuFl zfYk}r)(jj>FThpdPBEn|V#AbHK;f?lN1{r?xRi_={)&NUq{Pwai4qTm+y8Oof7UkE z)lHJqNX?<-^ibcTqwIOQYSaLizs-!NPhQf_eBc3u6 wiu!kJcwpbry&Y|;zhW>I!&GwooYLCbs-7P5S2$~tfmr;4uDI0=vLM#+2ag6bA^-pY diff --git a/Source/Images/d_nzcom/u0/KERMIT.COM b/Source/Images/d_nzcom/u0/KERCPM22.COM similarity index 95% rename from Source/Images/d_nzcom/u0/KERMIT.COM rename to Source/Images/d_nzcom/u0/KERCPM22.COM index b24df273d412a4a4428797ea2b9e4814a94acf0d..a3a9f3c29823c1df0aeb7436256ad281e7b33b3b 100644 GIT binary patch delta 859 zcmYk4Ur19?9LLXfv$pBPsX?`xw|0m^vbkR5no=%QG);6WWkF`wTIqJrIaf2wZT3*~ zAQYnqUwr5fg7i=rEa=Joki3H%jWFn;Y=mJFMUVL)o#UVAp5LDj=llD?{oVVEf0N?N z(sOGh_Jqz-xXoaa!8C&z2KN|DFu2bk#o#pqgoG_JSYYsu!4d-tg+&7I3A`a-5?Chi zo4_i8XBvFw5``}mvJ}2jSf=ok!moAn6R_)WmVl2!DQ(mde`?tuD@BDUaW_(abc_|` zo4IJzzoNNns98!~L%N79>wHkKxrgq%qwjyL)g1Rf)yz+c<;bbZa-n3nd%DdDw%ODn znv`)ZIqw=5XecY%ns4<1QO==cdVo{|O*Ct}bK@j8HInGpcEzTMrK@c8W%?Bv*_(Pq zGQ}`SGNB8~wD!R=f2cY&OAM*R%4d*Daz)JFX4-WZ)%h@zw4F12B$8y?1e<*e@-{%c zOS+JkI-!_HA-lq&*;PfC7Ul|Kc0T)TCTnE9Uhns4k+(Q+_(jS`4W|S5M#6oe%Y#(C zB=<$AjOFVg{fdmwI~`6(%izF8mCBJmS?lS&rs_=j|Bk9U4XNU;F4V8e;hq6i!J^IS zXcP5Za5~xrNlIc(3lx>nn}#?>)E{Tws6WOM?W8p}z$~r7HmosAFn9(tX6Xo2;31yc zD)0@F{P-5@$U&V}gmO?<4!UYZQ7f``K2+k&Z$XAKww}x)lAJep5TnW5NsOgACB{yR zxwFPU#hhlz)C@CB58-Akm_O(gPQPVMrki98kBu*8bAVA>)gk<3)!YM<7Pg1a1lKlO*flXmUV9vOab0I z+~(Dm*KBXj!LBOb{YW1gR-Wi)*l6aD`ySXyU8u|Y-_Rcf^(-sbPQoCK8(Dq3I|=T} z8RNF@8@UC}$-e2?+C8||Te$)C%~XPV=Dhk`|Kh9$1}hIi_$8~lUotJ)YcF9AytCZ; zt@mw%Ye)+R4iu@H54mROp%)urd?2?NWUCcFcS6x8G$%MMt60;l1RdWl7F>@P;r4MQY zPgyH^|6Qynrkj^59xhBjSP=8(C_a^I0X}B-SWEG5STAHd@2hqXtCO*U{$A8ct<$$*feks%sM0vRbO3r6u|QXe4^z#Qtzd?&=&bB(admU6g{s YpnNXT)oH!OqRG@{RkG8zGawoM2d%*pPyhe` diff --git a/Source/Images/d_cpm3/u0/KERMIT.COM b/Source/Images/d_zpm3/u15/kercpm3.com similarity index 96% rename from Source/Images/d_cpm3/u0/KERMIT.COM rename to Source/Images/d_zpm3/u15/kercpm3.com index 16dc23085851059630100f964b06bb9bdd006371..4882ea5098768f03320d5486c0781f1daa25109b 100644 GIT binary patch delta 718 zcmYk4PiPZS5XN_HqRGZBt_@fX4QsO~qSC~Il(p4rOIs|hqEZi0u*R)!ZIgZTS`#P2>27Qk)ldb5O}mx+)gn;v5TS)@EySy1akzR5-by3Ah<~I zu7z(|3$O_I9`FNT8Soq6_ewMq9Hy8gm;hAa4i&1)CkU$q`*KF#xC=ZLlvkA3eHFgK z*=vCHpJ?NxwX=QOl;yp#KWF+{uJcZTWi;t6E|~_nNxy2%=9Ft3UHyyoJO1ki(T@nT z`7~)mYWG{~{FjK|Id6|zYqK+?=J4hVkMfVnxdvyF6zcF6DVWFf+t$mP+@?0iA+8wq zvAM;tpVyVkyd z^9xT3MYkA>#mW~~$Ld07A2h@qwjM-5%$Hd#8r^{gRF2RVtl{m1H9wgv1?5^oOC zS*M=5_uP5!D@^B`Xsw@(S8$^N_8+1uyXOiila&+Pp-k3I??*YH}pm%b3M(mU~!suNRvoYU5x?l84=JSkOso_SOvj($v>6EyCgDJ$?oW9=uh6S{L;R_J5S>y zv~E%rTDb-BhurS}>kl{9LG?1@TrblN8!-=Wg6o!I{Lpo$>mA?>+O)vZWCInci?}YNiJuv#;D}e=v`DNq@skmEV~z7E@b>H z5>K#%goRu&ooD40Sz?Nmm$GGPk@>DyBeM@<4;}@54*Og=jpbbN4GRPUzWG-UyYUvE PO=sVV%uIX4A)UMez4_6o diff --git a/Source/Images/d_zpm3/u15/kermit.com b/Source/Images/d_zsdos/u0/KERCPM22.COM similarity index 95% rename from Source/Images/d_zpm3/u15/kermit.com rename to Source/Images/d_zsdos/u0/KERCPM22.COM index 16dc23085851059630100f964b06bb9bdd006371..a3a9f3c29823c1df0aeb7436256ad281e7b33b3b 100644 GIT binary patch delta 996 zcmYk5L2MI86hLRQ4v7sLv4lc{!P&%9REi4Dp3u^u5(7a*gvdCFN{U2kHekT<&dich zD6!!H;(!FQIOLK8w2Bn<(27by;uL>H%|_a)Ruv=;lv>DAN~NF82Aj97`$Zgn!yha{DCeGe{v{uc*bFg!@nF}RK;Wvbm16-7>8DV$R+r7iB|zm z){?^Y?AFxZPE&(lPs}T#X${)T=5t5i!~IsSkGXQ}t@6i`{ms1Xn%jQQ+4H&iz2iUO z9{EHex=LEwn_1OtsF{|U+066^`XUA0*|`5BrWK>Cv)IPGMSX`{u7nyH@+ZXdPW^Hx z>!vd^uiupDSLN&_-HW{T3d42{9Ju(}5F zEDLKfRD)(5rCT4B$@*?yS)6Oi1+ieWrLtF!Mx%d?uZuRXzVK5q#yu@WQ`ymx^r`dQ zK52|(xj~Ju)9z`59@j!zsP}y4E1MhH5yKfyowZ$Iy+6lom#1wxcOZSvHb#dtwnb%{ z7D~u?bZDWYk`$}(pA*k*=a)SBd*fzaM90mXzyrh+N#mqFmQLAPs4tmV;biiQ74DCB zyyL|CY%b5!RVpq-GeX5Rs3TNNr$VThNypG6I_Nh!X-)dA=&vIK0Yd7?U>!LVAmafN z7`S8Qg{czHx>7a%IyN)!f55yR|3l_g=B%7JB5PRoRy_W+m?_>Do*!W--lG2xpIZ1; z^!Q;`@*<7+NFoN_nJVdB*o_8khipn=ibZmBdbhk<<;uCO#BWq0yD_v}!-JSQknD)X zX!x`6(82J~AuSXP(i&1NJk*1XvKO@rHIBNEQhYCO6+>zGFeR9Zz8>0bkJ>z)GU9zZ O4}ZEVhG7LUeBpn5r*yRd delta 599 zcmX|7O=uHQ5PmUwWh&VRB<>(bp#x6PdEqiUPJ6E$2|NFW(*?RmcZ0tpZN;T>5DLB zyUz`2yRsp+7VP56tP~JDvut}eY0XQ1x9p5#%QDdZXfHSy@J;(MNv+(z~$