Browse Source

Restore dgg branch to latest checked-in files

import/raw
wayne 13 years ago
parent
commit
21d66e202c
  1. 64
      branches/dgg/Doc/Interrupts.txt
  2. 86
      branches/dgg/Source/bnk1.asm
  3. 24
      branches/dgg/Source/cbios.asm
  4. 3
      branches/dgg/Source/config_n8vem.asm
  5. 3
      branches/dgg/Source/config_n8vem_dide.asm
  6. 3
      branches/dgg/Source/config_n8vem_diskio.asm
  7. 3
      branches/dgg/Source/config_n8vem_diskio3.asm
  8. 3
      branches/dgg/Source/config_n8vem_ppide.asm
  9. 3
      branches/dgg/Source/config_n8vem_ppisd.asm
  10. 3
      branches/dgg/Source/config_n8vem_propio.asm
  11. 3
      branches/dgg/Source/config_n8vem_vdu.asm
  12. 33
      branches/dgg/Source/sd.asm
  13. 14
      branches/dgg/Source/std.asm
  14. 1
      branches/dgg/Source/util.asm
  15. 5
      branches/dgg/Source/vdu.asm

64
branches/dgg/Doc/Interrupts.txt

@ -0,0 +1,64 @@
Interrupts for RomWBW Firmware
INTRODUCTION
The Z80 has four modes of interrupts. Mode 0 is not suitable as the N8VEM range does not have the hardware to support it. Mode 1 interrupts can be used if we're very careful when using banked memory. This means either disabling interrupts whenever a new bank of memory is switched into the lower 32k or providing a means of dealing with the interrupt in each bank of memory switched into the lower 32k. The /NMI interrupt has similar problems except that it must have a way dealing with it in all banks as it can't be disabled with the hardware provided.
So that leaves the Z80's most powerful interrupt mode - Mode 2. Which is now catered for in the RomWBW firmware. As of v2.2 the firmware will allow Mode 2 interrupts on the N8 or an N8VEM Z80-SBC with either a Zilog Peripherals or a 4PIO board. Mode 2 allows interrupt service routines to be placed anywhere within the 64k addressable by the Z80. The firmware is configured to keep these routines in the top 32k, out of harm's way.
WHAT WON'T WORK
First the warnings. The N8VEM Z80-SBC by itself can't use Mode 2 interrupts as it does not have the necessary hardware. Similarly for the Zeta. The /NMI input for any of the boards should not be used as mentioned in the introduction.
N8 HARDWARE
The Z180 has 10 sources of maskable interrupts, three external and seven internal.
/INT0 works in much the same way as the /INT pin on a Z80. It does not generate its own vector; that must be supplied externally by the interrupting device. It should only be used with hardware that supports Mode 2 e.g. a Zilog Peripherals Board on the ECB BUS. None of the on-board sources are suitable (PPI U7, TMS9918A).
/INT1 generates its own vector and is suitable to be used with the on-board peripherals.
/INT2 generates its own vector and is connected to the on-board floppy drive controller.
All internal interrupts only use Mode 2.
N8VEM Z80-SBC HARDWARE
The only interrupt source on the Z80-SBC is the UART. The UART's INT pin needs to be inverted and connected to a Z80 peripheral chip that can generate the interrupt vector. For a MK-I board a modification is needed. The collector of Q1 should be disconnected from the /INT pin and routed to pin A23 of the ECB connector with a 4k7 pull-up resistor (The /INT pin should still have its pull-up resistor R4 connected). For the MK-II board install a jumper on pins 2-3 of K12.
ZILOG PERIPHERALS
This board contains a Z80-DART, Z80-CTC and two Z80-PIOs, all of which can be used with Mode 2 interrupts. To use an external non-vectored interrupt source (such as the CPU board's UART), pin A23 of the ECB BUS can be connected to an unused input of any of these chips. The recommended modification is connecting ECB BUS pin A23 to pin 10 of header X4. Then install a jumper on pins 9-10 of header X4 to use the channel 3 input of the CTC as a interrupt controller.
4PIO
This board contains four Z80-PIOs, all of which can be used with Mode 2 interrupts. To use an external non-vectored interrupt source one of the ports should be configured in PIO Mode 3. This bit I/O mode can set up any to all of its eight port pins as an interrupt input.
FIRMWARE
The RomWBW firmware itself does not use any interrupts (though this may change). All it does is check which platform it is configured for and set the CPU to the appropriate mode. Thirty-two bytes at FF00-FF1F are reserved for sixteen Mode 2 interrupt vectors. All are set to point to a dummy Interrupt Service Routine (ISR) which merely:
DUMISR:
EI ; RE-ENABLE INTERRUPTS
RETI ; RETURN FROM INTERRUPT
It is left to the application to alter the vector address to point to the new ISR. The firmware will configure the N8's CPU or chips on a Zilog Peripherals or 4PIO board to point to the vector table. The default table (from bnk1.asm) is
; DEFAULT VECTORS ALL POINT TO DUMMY INTERRUPT SERVICE ROUTINE
HB_IVT: ; *** = NOT USED
; VECTOR ADDR N8 4PIO ZILOG PERIPHERAL
.DW DUMISR ; FF00 /INT1 PIO0 A CTC CHANNEL 0
.DW DUMISR ; FF02 /INT2 PIO0 B CTC CHANNEL 1
.DW DUMISR ; FF04 PRT0 PIO1 A CTC CHANNEL 2
.DW DUMISR ; FF06 PRT1 PIO1 B CTC CHANNEL 3
.DW DUMISR ; FF08 DMA0 PIO2 A PIO1 PORT A
.DW DUMISR ; FF0A DMA1 PIO2 B PIO1 PORT B
.DW DUMISR ; FF0C CSI/O PIO3 A PIO2 PORT A
.DW DUMISR ; FF0E ASCI0 PIO3 B PIO2 PORT B
.DW DUMISR ; FF10 ASCI1 *** DART - ANY OR CH.B TX EMPTY
.DW DUMISR ; FF12 *** *** DART CH.B EXTERNAL STATUS CHANGE
.DW DUMISR ; FF14 *** *** DART CH.B RX CHAR AVAILABLE
.DW DUMISR ; FF16 *** *** DART CH.B SPECIAL RECEIVE CONDITION
.DW DUMISR ; FF18 *** *** DART CH.A TX EMPTY
.DW DUMISR ; FF1A *** *** DART CH.A EXTERNAL STATUS CHANGE
.DW DUMISR ; FF1C *** *** DART CH.A RX CHAR AVAILABLE
.DW DUMISR ; FF1E *** *** DART CH.A SPECIAL RECEIVE CONDITION
FIRMWARE CONFIGURATION
For the N8 or Zeta boards no changes need to be made. For the Z80-SBC boards there are configuration options for a Zilog Peripherals or one 4PIO board. Only the board's base address needs to be set to match the jumpers on the board. Suitable values that are unlikely to clash with other hardware are 10H, 0A0H, 0B0H, 0C0H, 0D0H and 0E0H. A value of 0 is for no board attached.
Alter these to suit your hardware (only one board of either type is supported by default).
PIO4BASE .EQU 0 ;
ZPBASE .EQU 0 ;
OTHER NOTES
While there is no reason why a Zilog Peripherals or 4PIO board cannot be connected to a N8, this combination isn't configured in the firmware.
In the source is a file called "isr.asm". Any interrupt service routines needed to be placed in the CBIOS area can be added to this file.
DGG

86
branches/dgg/Source/bnk1.asm

@ -46,6 +46,61 @@ INITSYS2:
LD (CONDEV),A ; SET THE ACTIVE CONSOLE DEVICE
#ENDIF
;
; PERFORM INTERRUPT INITIALISATION
;
#IF (INTMODE = 2)
LD A,0FFH ; INTERRUPT VECTOR TABLE PAGE
LD I,A ; INTERRUPT VECTOR REGISTER
IM 2 ; MODE 2 INTERRUPTS
#IF (PLATFORM = PLT_N8)
XOR A ; PUT Z180 VECTORS ON PAGE BOUNDARY
OUT (CPU_IL),A
#ENDIF
#IF ((PLATFORM = PLT_N8VEM) & (ZPBASE !=0))
; INIT VECTORS ON ZILOG PERIPHERALS BOARD
; INIT Z80-CTC
XOR A ; VECTOR AT FF00H
OUT (ZPBASE+0),A ; ALL CHANNELS
; INIT Z80-PIO1
LD A,08H ; VECTOR AT FF08H
OUT (ZPBASE+0AH),A ; PORT A
LD A,0AH ; VECTOR AT FF0AH
OUT (ZPBASE+0BH),A ; PORT B
; INIT Z80-PIO2
LD A,0CH ; VECTOR AT FF0CH
OUT (ZPBASE+0EH),A ; PORT A
LD A,0EH ; VECTOR AT FF0EH
OUT (ZPBASE+0FH),A ; PORT B
; INIT Z80-DART/SIO
LD A,02 ; POINT TO REGISTER 2
OUT (ZPBASE+7),A ; CHANNEL B COMMAND
LD A,10H ; VECTOR AT FF10H
OUT (ZPBASE+7),A ; ONE VECTOR FOR WHOLE CHIP
#ENDIF
#IF ((PLATFORM = PLT_N8VEM) & (PIO4BASE !=0))
; INIT VECTORS ON A 4PIO BOARD
XOR A ; VECTOR AT FF00H
OUT (PIO4BASE+1) ; PIO0 PORT A
LD A,02 ; VECTOR AT FF02H
OUT (PIO4BASE+3) ; PIO0 PORT B
LD A,04 ; VECTOR AT FF04H
OUT (PIO4BASE+5) ; PIO1 PORT A
LD A,06 ; VECTOR AT FF02H
OUT (PIO4BASE+7) ; PIO1 PORT B
LD A,08 ; VECTOR AT FF02H
OUT (PIO4BASE+9) ; PIO2 PORT A
LD A,0AH ; VECTOR AT FF02H
OUT (PIO4BASE+B) ; PIO2 PORT B
LD A,0CH ; VECTOR AT FF02H
OUT (PIO4BASE+D) ; PIO3 PORT A
LD A,0EH ; VECTOR AT FF02H
OUT (PIO4BASE+F) ; PIO3 PORT B
#ENDIF
#ENDIF
;
; PERFORM DEVICE INITIALIZATION
;
#IF (UARTENABLE)
@ -411,8 +466,26 @@ HB_IMG .EQU $
;
; AREA RESERVED FOR UP TO 16 INTERRUPT VECTOR ENTRIES (MODE 2)
;
HB_IVT:
.FILL 20H,0FFH
; DEFAULT VECTORS ALL POINT TO DUMMY INTERRUPT SERVICE ROUTINE
HB_IVT: ; *** = NOT USED
; VECTOR ADDR N8 4PIO ZILOG PERIPHERAL
.DW DUMISR ; FF00 /INT1 PIO0 A CTC CHANNEL 0
.DW DUMISR ; FF02 /INT2 PIO0 B CTC CHANNEL 1
.DW DUMISR ; FF04 PRT0 PIO1 A CTC CHANNEL 2
.DW DUMISR ; FF06 PRT1 PIO1 B CTC CHANNEL 3
.DW DUMISR ; FF08 DMA0 PIO2 A PIO1 A
.DW DUMISR ; FF0A DMA1 PIO2 B PIO1 B
.DW DUMISR ; FF0C CSI/O PIO3 A PIO2 A
.DW DUMISR ; FF0E ASCI0 PIO3 B PIO2 B
.DW DUMISR ; FF10 ASCI1 *** DART - ANY OR CH.B TX EMPTY
.DW DUMISR ; FF12 *** *** DART CH.B EXTERNAL STATUS CHANGE
.DW DUMISR ; FF14 *** *** DART CH.B RX CHAR AVAILABLE
.DW DUMISR ; FF16 *** *** DART CH.B SPECIAL RECEIVE CONDITION
.DW DUMISR ; FF18 *** *** DART CH.A TX EMPTY
.DW DUMISR ; FF1A *** *** DART CH.A EXTERNAL STATUS CHANGE
.DW DUMISR ; FF1C *** *** DART CH.A RX CHAR AVAILABLE
.DW DUMISR ; FF1E *** *** DART CH.A SPECIAL RECEIVE CONDITION
; .FILL 20H,0FFH
;
;==================================================================================================
; HBIOS INITIALIZATION
@ -482,6 +555,15 @@ HB_ENTRY:
;
HB_STKSAV .DW 0 ; PREVIOUS STACK POINTER (SEE PROXY)
;
;==================================================================================================
; DUMMY INTERRUPT SERVICE ROUTINE
;==================================================================================================
;
HB_DUMISR:
DUMISR .EQU $
EI ; RE-ENABLE INTERRUPTS
RETI ; RETURN FROM INTERRUPT
;
HB_SLACK .EQU (HB_END - $)
.ECHO "HBIOS space remaining: "
.ECHO HB_SLACK

24
branches/dgg/Source/cbios.asm

@ -98,8 +98,11 @@ BOOT:
;__________________________________________________________________________________________________
WBOOT:
DI
IM 1
#IF (INTMODE = 2)
IM 2 ; HARDWARE SUPPORTS MODE 2 INTERRUPTS
#ELSE
IM 1 ; HARDWARE DOES NOT SUPPORT MODE 2 INTERRUPTS
#ENDIF
LD SP,ISTACK ; STACK FOR INITIALIZATION
; RELOAD COMMAND PROCESSOR FROM CACHE
@ -162,6 +165,9 @@ CURDSK:
LD A,(CDISK) ; GET CURRENT USER/DISK
GOCCP:
LD C,A ; SETUP C WITH CURRENT USER/DISK, ASSUME IT IS OK
#IF (INTMODE = 2)
EI ; BE BRAVE
#ENDIF
JP CCP
;
;__________________________________________________________________________________________________
@ -1344,6 +1350,13 @@ MD_DMACPY:
;
#INCLUDE "memmgr.asm"
;
ORG_ISR .EQU $
#INCLUDE "isr.asm"
SIZ_ISR .EQU $ - ORG_ISR
.ECHO "ISR occupies "
.ECHO SIZ_ISR
.ECHO " bytes.\n"
;
;==================================================================================================
; UTILITY FUNCTIONS
;==================================================================================================
@ -2003,7 +2016,12 @@ CFGBUF: ; START OF 256 BYTE CONFIG BUFFER
;
INIT:
DI
IM 1
#IF (INTMODE = 2)
IM 2 ; HARDWARE SUPPORTS MODE 2 INTERRUPTS
CALL INITISR ; INITIALISE VECTOR TABLE AND ANY INTERRUPT HARDWARE
#ELSE
IM 1 ; HARDWARE DOES NOT SUPPORT MODE 2 INTERRUPTS
#ENDIF
; SETUP A TEMP STACK IN UPPER 32K
LD SP,ISTACK ; STACK FOR INITIALIZATION

3
branches/dgg/Source/config_n8vem.asm

@ -84,3 +84,6 @@ BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT
;
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
;
PIO4BASE .EQU 0 ; BASE ADDRESS OF 4PIO BOARD (0=NO BOARD, USE 10H, 0A0H, 0B0H, 0C0H, 0D0H, 0E0H
ZPBASE .EQU 0 ; BASE ADDRESS OF ZILOG PERIPHERALS BOARD (SAME AS PIO4BASE)

3
branches/dgg/Source/config_n8vem_dide.asm

@ -84,3 +84,6 @@ BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT
;
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
;
PIO4BASE .EQU 0 ; BASE ADDRESS OF 4PIO BOARD (0=NO BOARD, USE 10H, 0A0H, 0B0H, 0C0H, 0D0H, 0E0H
ZPBASE .EQU 0 ; BASE ADDRESS OF ZILOG PERIPHERALS BOARD (SAME AS PIO4BASE)

3
branches/dgg/Source/config_n8vem_diskio.asm

@ -84,3 +84,6 @@ BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT
;
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
;
PIO4BASE .EQU 0 ; BASE ADDRESS OF 4PIO BOARD (0=NO BOARD, USE 10H, 0A0H, 0B0H, 0C0H, 0D0H, 0E0H
ZPBASE .EQU 0 ; BASE ADDRESS OF ZILOG PERIPHERALS BOARD (SAME AS PIO4BASE)

3
branches/dgg/Source/config_n8vem_diskio3.asm

@ -84,3 +84,6 @@ BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT
;
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
;
PIO4BASE .EQU 0 ; BASE ADDRESS OF 4PIO BOARD (0=NO BOARD, USE 10H, 0A0H, 0B0H, 0C0H, 0D0H, 0E0H
ZPBASE .EQU 0 ; BASE ADDRESS OF ZILOG PERIPHERALS BOARD (SAME AS PIO4BASE)

3
branches/dgg/Source/config_n8vem_ppide.asm

@ -84,3 +84,6 @@ BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT
;
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
;
PIO4BASE .EQU 0 ; BASE ADDRESS OF 4PIO BOARD (0=NO BOARD, USE 10H, 0A0H, 0B0H, 0C0H, 0D0H, 0E0H
ZPBASE .EQU 0 ; BASE ADDRESS OF ZILOG PERIPHERALS BOARD (SAME AS PIO4BASE)

3
branches/dgg/Source/config_n8vem_ppisd.asm

@ -84,3 +84,6 @@ BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT
;
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
;
PIO4BASE .EQU 0 ; BASE ADDRESS OF 4PIO BOARD (0=NO BOARD, USE 10H, 0A0H, 0B0H, 0C0H, 0D0H, 0E0H
ZPBASE .EQU 0 ; BASE ADDRESS OF ZILOG PERIPHERALS BOARD (SAME AS PIO4BASE)

3
branches/dgg/Source/config_n8vem_propio.asm

@ -84,3 +84,6 @@ BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT
;
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
;
PIO4BASE .EQU 0 ; BASE ADDRESS OF 4PIO BOARD (0=NO BOARD, USE 10H, 0A0H, 0B0H, 0C0H, 0D0H, 0E0H
ZPBASE .EQU 0 ; BASE ADDRESS OF ZILOG PERIPHERALS BOARD (SAME AS PIO4BASE)

3
branches/dgg/Source/config_n8vem_vdu.asm

@ -84,3 +84,6 @@ BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT
;
BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2
;
PIO4BASE .EQU 0 ; BASE ADDRESS OF 4PIO BOARD (0=NO BOARD, USE 10H, 0A0H, 0B0H, 0C0H, 0D0H, 0E0H
ZPBASE .EQU 0 ; BASE ADDRESS OF ZILOG PERIPHERALS BOARD (SAME AS PIO4BASE)

33
branches/dgg/Source/sd.asm

@ -88,14 +88,22 @@ SD_DISPATCH:
;
SD_MEDIA:
; INITIALIZE THE SD CARD TO ACCOMMODATE HOT SWAPPING
#IF (INTMODE = 2)
DI
#ENDIF
CALL SD_INITCARD
LD A,MID_NONE ; ASSUME FAILURE
RET NZ ; INIT FAILED, RETURN WITH HL=0
; RET NZ ; INIT FAILED, RETURN WITH HL=0
JR NZ,SD_MEDIAEND ; INIT FAILED, RETURN WITH HL=0
; SET READY AND RETURN
XOR A
LD (SD_STAT),A ; SD_STAT = 0 = OK
LD A,MID_HD
SD_MEDIAEND:
#IF (INTMODE = 2)
EI
#ENDIF
RET
;
SD_INIT:
@ -715,8 +723,12 @@ SD_CHKCARD:
RET ; RETURN WITH STATUS IN A
SD_RDSEC:
#IF (INTMODE = 2)
DI
#ENDIF
CALL SD_CHKCARD ; CHECK / REINIT CARD AS NEEDED
RET NZ
; RET NZ
JR NZ,SD_RDSECEND
CALL SD_WAITRDY ; WAIT FOR CARD TO BE READY FOR A COMMAND
JP NZ,SD_ERRRDYTO ; HANDLE NOT READY TIMEOUT ERROR
@ -732,13 +744,21 @@ SD_RDSEC:
CALL SD_GETDATA ; GET THE BLOCK
CALL SD_DONE
JP NZ,SD_ERRDATA ; DATA XFER ERROR
SD_RDSECEND:
#IF (INTMODE = 2)
EI
#ENDIF
RET
;
; WRITE ONE SECTOR
;
SD_WRSEC:
#IF (INTMODE = 2)
DI
#ENDIF
CALL SD_CHKCARD ; CHECK / REINIT CARD AS NEEDED
RET NZ
; RET NZ
JR NZ,SD_WRSECEND
CALL SD_WAITRDY ; WAIT FOR CARD TO BE READY FOR A COMMAND
JP NZ,SD_ERRRDYTO ; HANDLE NOT READY TIMEOUT ERROR
@ -754,6 +774,10 @@ SD_WRSEC:
CALL SD_PUTDATA ; PUT THE BLOCK
CALL SD_DONE
JP NZ,SD_ERRDATA ; DATA XFER ERROR
SD_WRSECEND:
#IF (INTMODE = 2)
EI
#ENDIF
RET
;
;
@ -844,6 +868,9 @@ SD_CARDERR:
#ENDIF
POP AF
LD (SD_STAT),A
#IF (INTMODE = 2)
EI
#ENDIF
RET
;
; PRINT DIAGNONSTIC PREFIX

14
branches/dgg/Source/std.asm

@ -438,6 +438,20 @@ BDOS: .EQU CCP+806H ; BASE OF BDOS
BIOS: .EQU CCP+1600H ; BASE OF BIOS
CCPSIZ: .EQU 00800H
;
#IF (PLATFORM = PLT_N8)
INTMODE .EQU 2 ; N8 USES MODE 2 INTERRUPTS
#ENDIF
#IF (PLATFORM = PLT_ZETA)
INTMODE .EQU 1 ; ZETA CAN ONLY USE MODE 1
#ENDIF
#IF (PLATFORM = PLT_N8VEM)
#IF ((ZPBASE != 0) | (PIO4BASE != 0))
INTMODE .EQU 2 ; MODE 2 WITH ZILOG PERIPHERALS OR 4PIO
#ELSE
INTMODE .EQU 1 ; N8VEM BY ITSELF CAN ONLY USE MODE 1
#ENDIF
#ENDIF
#IF (PLATFORM == PLT_N8VEM)
#DEFINE PLATFORM_NAME "N8VEM Z80 SBC"
#ENDIF

1
branches/dgg/Source/util.asm

@ -191,6 +191,7 @@ WRITESTR2:
; PANIC: TRY TO DUMP MACHINE STATE AND HALT
;
PANIC:
DI ; STOP ANY INTERRUPTS
PUSH HL
PUSH DE
PUSH BC

5
branches/dgg/Source/vdu.asm

@ -804,6 +804,11 @@ VDU_INIT6845:
; HORIZONTAL LINE WIDTH IS 64uS. FOR A 2 MHz CHARACTER CLOCK (R0+1)/2000000 = 64uS
; NEAREST NUMBER OF LINES IS 312 = (R4+1) * (R9+1) + R5.
; 15625 / 312 = 50.08 FIELDS PER SECOND (NEAR ENOUGH-DGG)
;
; IF TRYING THE SLOWER CHAR CLOCK TO GIVE 9 PIXELS HORIZONTAL PER CHAR, CHANGE THE FOLLOWING
; JUMPER K1 1-2 TO GIVE 1.777MHz CHAR CLOCK
; CHANGE R0 TO 112 FOR A HSYNC OF 15732
; CHANGE R2 TO 91 TO CENTRE DISPLAY
;__VDU_CRTINIT_____________________________________________________________________________________

Loading…
Cancel
Save