smashtv/BACKUP/ROBOTST.ASM

3248 lines
74 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
; .MLIB "TROGMACS.LIB"
**************************************************************************
*
* COPYRIGHT (C) 1990 WILLIAMS ELECTRONICS GAMES INC.
* ALL RIGHTS RESERVED.
*
**************************************************************************
; .INCLUDE "\VIDEO\ROBO\MPROC.EQU" ;MPROC EQUATES
; .INCLUDE "\VIDEO\ROBO\DISP.EQU" ;DISPLAY PROC. EQUATES
.INCLUDE "\VIDEO\SYS\GSP.INC" ;GSP ASSEMBLER EQUATES
.INCLUDE "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS
; .INCLUDE "\VIDEO\ROBO\IMGTBL.GLO"
; .INCLUDE "STRING.H"
.INCLUDE "ROBOAUD.EQU"
**************************************************************************
* *
* DEFS AND REFS *
* *
**************************************************************************
.GLOBAL SETUP
.DEF POWERTST
; .DEF SWITCHTEST, CONV_PLOT, DIPTEST, DIAGCPUTEST, POWERCMOS
; .DEF CHECKDIPFREE, READ_DIP, FORCEDIP
; .DEF BURNIN, COLORBAR
.DEF CIRCLE, HVLINE, STRING, RECTANGLE, POINT, DSCRCLR, INITCOLR
.DEF STRINGCENTER
; .REF SNDRES,POWERRET, INITCOLR
; .REF ROM_NAME, CMOS_VAL, FAC_SET, INIT_TAB, WARMSET, PCMOSRET
; .REF INIT_TB, ALL_TAB, TOD_TAB
; .REF GET_HSC, INIT_HSR, VAL_TAB
; .REF CMOSLOCK, CMOSUNLOCK, CPU_RET, CLSCRACH, EXEC_LP, COLOR_START
; .REF DIPINIT, CLRALLPD, SINTRAM, IRQLED, EXECLED
; .REF WDOGRAM
; .REF WC_BYTEI, RC_BYTEI, WIPEOUT, RC_LONGI, WC_LONGI
; .REF CLR_AUD, STORE_AUDIT
;
; .REF KILL_AUD
; .REF WDOGDIS, WDISTAB
; .REF CKTEST
;
; .REF DIPCOINTAB, SET_COIN_ADJ
; .REF GET_CSPT, PUT_ADJ
; .REF BLASTMESS
; .REF CLEAR_HSCOLORS
.BSS SWSET1,32 ; FOR SWITCH TEST
.BSS SWSET2,32
.BSS DIPVAL,16
.BSS FORCEDIP,16 ; FOR FORCING THE USE OF THE DIP
.BSS CERRORS,32
.BSS CPASSES,32
.BSS SCHANGE,16
.TEXT
.EVEN
**************************************************************************
* *
* USEFUL MACROS *
* *
**************************************************************************
BUT_MAC $MACRO X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND
.WORD :X:
.WORD :Y:
.WORD :RADIUS:
.LONG :COLOR:
.LONG :MASK:
.WORD :SHIFT:
.WORD :EXTEND:
$END
STR_MAC $MACRO X,Y,STRING,COLOR,DIR
.WORD :X:
.WORD :Y:
.LONG :STRING:
.WORD :COLOR:
.WORD :DIR:
$END
VECMAC $MACRO COLOR,X1,Y1,X2,Y2
.WORD :COLOR:
.WORD :X1:
.WORD :Y1:
.WORD :X2:
.WORD :Y2:
$END
DOTMAC $MACRO COLOR,X,Y
.WORD :COLOR:
.WORD :X:
.WORD :Y:
$END
RECTMAC $MACRO COLOR,X,Y,W,H
.WORD :W:
.WORD :H:
.WORD :X:
.WORD :Y:
.WORD :COLOR:
$END
CHIPMAC $MACRO NUM,X1,Y1,X2,Y2,X3,Y3,STRING,DIR,X4,Y4,STUFFED
.WORD :NUM:
.WORD :X1:
.WORD :Y1:
.WORD :X2:
.WORD :Y2:
.WORD :X3:
.WORD :Y3:
.LONG :STRING:
.WORD :DIR:
.WORD :X4:
.WORD :Y4:
.WORD :STUFFED:
$END
CMNUM EQU 0
CMLOC EQU CMNUM+16
CMXLOC EQU CMLOC
CMYLOC EQU CMLOC+16
CMSIZE EQU CMLOC+32
CMXSIZE EQU CMSIZE
CMYSIZE EQU CMSIZE+16
CMOFFSET EQU CMSIZE+32
CMSTRING EQU CMOFFSET+32
CMDIR EQU CMSTRING+32
CMPINLOC EQU CMDIR+16
CMSTUFFED EQU CMPINLOC+32
CMEND EQU CMSTUFFED+16
**************************************************************************
* *
* RAM_CHIP: MACRO DEFINES A RAM CHIP RECORD. *
* *
* CHIP_NO -- CHIP NUMBER *
* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) *
* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) *
* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP *
* END_ADDR -- ADDRESS OF LAST CELL ON CHIP *
* *
**************************************************************************
RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR
.WORD :WIDTH:
.WORD :INTERLEAVE:
.WORD :CHIP_NO:
.LONG :START_ADDR:
.LONG :END_ADDR:
.LONG :TAB_LINK:
$END
RAM_WDTH EQU 000H ; OFFSETS INTO RAM CHIP RECORD
RAM_ITLV EQU 010H
RAM_NMBR EQU 020H
RAM_SADR EQU 030H
RAM_EADR EQU 050H
RAM_LINK EQU 070H
RAM_SIZE EQU 090H
ROM_CKSM EQU 000H
ROM_WDTH EQU 010H ; OFFSETS INTO ROM CHIP RECORD
ROM_ITLV EQU 020H
ROM_NMBR EQU 030H
ROM_SADR EQU 040H
ROM_EADR EQU 060H
ROM_LINK EQU 080H
ROM_SIZE EQU 0A0H
;****************************************************************************
;* ROM_CHIP: MACRO DEFINES A ROM CHIP RECORD. *
;* *
;* CHIP_NO -- CHIP NUMBER *
;* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) *
;* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) *
;* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP *
;* END_ADDR -- ADDRESS OF LAST CELL ON CHIP *
;* CHECK_SUM -- DATAIO CHECK SUM FOR CHIP *
;****************************************************************************
ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM
.WORD :CHECK_SUM:
.WORD :WIDTH:
.WORD :INTERLEAVE:
.WORD :CHIP_NO:
.LONG :START_ADDR:
.LONG :END_ADDR:
.LONG :TAB_LINK:
$END
RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE
ZERO_EXTEND EQU 1Fh ; PARAMETERS
SIGN_EXTEND EQU 20h
PAL_SELECT EQU 0FFDCH ; ENABLE VIDEO PALETTE MAP ACCESS
**************************************************************************
* *
* POWERTST *
* *
* POWERUP SELF TEST ROUTINES *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
POWERTST
SETUP
DINT
SETF 16, 0, 0
SETF 32, 0, 1
MOVI STCKST,SP,L
; HALT DMA AND ENABLE CACHE
CLR A14
MOVE A14, @DMACTRL
MOVE A14, @CONTROL
.IF 0
; RESET SOUND BOARD
MOVI 0FB00H, A14
MOVE A14, @SOUND_BOARD
CLR A14
NOT A14
MOVE A14, @SOUND_BOARD
.ENDIF
; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED
MOVI 0FFFCH,A13
MOVE A13,@SYSCTRL,W
MOVE A13,@SYSCOPY
; DISABLE WATCH DOG
SETF 16,1,0 ;SIGN EXTENSION ON FOR THIS
MOVI WDISTAB,A1
MOVK 1,A3
MOVI 0FFFCH,A2
MOVE *A1+,A0,W
WDOGSL
OR A2,A0
MOVE A0,@SYSCTRL,W
XOR A3,A0
MOVE A0,@SYSCTRL,W
MOVE *A1+,A0,W
JRNN WDOGSL
SETF 16,0,0 ;BACK OFF FOR BEGLEMAN SHIT
; INITIALIZE IO REGISTERS
MOVI HESYNC,B2,L
MOVI INITDATA,B0,L
MOVI (IDATAEND-INITDATA)/16,B10
INITIOS:
MOVE *B0+,*B2+
DSJS B10,INITIOS
********************************************
FCALL INITCOLR, B5
FCALL DSCRCLR,B6
JAUC AUDOUT ;OUTPUT YOUR AUDITS
********************************************
; JRUC POWERCPUTEST
**************************************************************************
* *
* POWERCPUTEST *
* *
* TEST OUT THE CPU BOARD AND RETURN TO POWERUP -- THIS CODE *
* IS ***DUPLICATED*** IN DIAGCPUTEST, SO REMEMBER THAT! *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
POWERCPUTEST
DINT
CLR B0
MOVI VRAMCHIPS, A14 ; VERIFY COLOR/VIDEO RAMS
FCALL RAMCHECK, B5
; ENABLE VIDEO PALETTE MAP ACCESS
MOVI PAL_SELECT, A13
MOVE A13,@SYSCTRL,W
MOVI PALCHIPS, A14 ; VERIFY VIDEO PALETTE MAP RAMS
FCALL RAMCHECK, B5
MOVE B0,A12
; DISABLE VIDEO PALETTE MAP ACCESS
MOVI 0FFFCH,A13
MOVE A13,@SYSCTRL,W
FCALL INITCOLR, B5 ; DISPLAY CPU BOARD
FCALL DSCRCLR,B6
FCALL CPUDRAW,B5
MOVI CPU,A10 ; WE GOT THIS FAR, CPU MUST BE OK
MOVI 1,A11
FCALL CHIPOUT,B5
MOVI VRAMTAB,A9
FCALL CHIPTABLE,B5 ; PLOT OUT THE CHIP TABLE
MOVE A12,A12
JRZ PDMACK
PBADRAM
MOVI RAMBADMESS,A0
MOVI [128,130],A1
CLR A2
MOVI TROG_RED,A3
FCALL STRING,B6
JRUC PCPUBAD
PDMACK
MOVI DMACMESS,A0
MOVI [128,130],A1
CLR A2
MOVI TROG_YELLOW,A3
FCALL STRING,B6
FCALL DMACHECK,B5 ; CHECK THE DMA
MOVI DMA,A10
MOVE A0,A11
MOVE A0,A12
INC A11 ; GREEN/RED
FCALL CHIPOUT,B5
MOVI [128,130],A0
MOVI [10,260],A1
MOVI TROG_BLACK,A2
FCALL RECTANGLE,B6
MOVE A12,A12
JRZ PSRAMCK
MOVI DMABADMESS,A0
MOVI [128,130],A1
CLR A2
MOVI TROG_RED,A3
FCALL STRING,B6
JRUC PCPUBAD
PSRAMCK
MOVI SRAMCHECK,A0
MOVI [128,130],A1
CLR A2
MOVI TROG_YELLOW,A3
FCALL STRING,B6
CLR B0
MOVI SRAMCHIPS,A14 ; VERIFY SCRATCH RAMS
FCALL RAMCHECK, B5
MOVE B0,A12
; MOVI SRAMTAB,A9
; FCALL CHIPTABLE,B5
MOVI [128,130],A0
MOVI [10,260],A1
MOVI TROG_BLACK,A2
FCALL RECTANGLE,B6
MOVE A12,A12
JRNZ PBADRAM
;
; ROM CHANGES
;
PROMCK
MOVI ROMCMESS,A0
MOVI [128,130],A1
CLR A2
MOVI TROG_YELLOW,A3
FCALL STRING,B6
CLR B0
MOVI PROMCHIPS,A14
FCALL ROMCHECK,B5
MOVE B0,B0
; JRNZ PBADROM ; FOR NOW, WOOF WOOF
CLR B0 ; CHECK ROMS
MOVI IROMCHIPS,A14
FCALL ROMCHECK,B5
MOVE B0,A12
MOVI [128,130],A0
MOVI [10,260],A1
MOVI TROG_BLACK,A2
FCALL RECTANGLE,B6
MOVE A12,A12
JRZ PCPUGOOD
PBADROM
MOVI [128,130],A0
MOVI [10,260],A1
MOVI TROG_BLACK,A2
FCALL RECTANGLE,B6
MOVI ROMBADMESS,A0
MOVI [128,130],A1
CLR A2
MOVI TROG_RED,A3
FCALL STRING,B6
;
; END OF ROM CHANGES
;
PCPUBAD
MOVI CPUPAUSE,A0
MOVI [143,130],A1
CLR A2
MOVI TROG_RED,A3
FCALL STRING,B6
PCPUWAIT
MOVI 0FD43H,A0
MOVE A0,@SOUND,W
MOVI 0FF43H,A0
MOVE A0,@SOUND,W ; LET HIM HEAR IT
MOVE A13,B5
PAUSE 10000,B6
MOVE @SWITCH,A0,L
ANDI 86241010H,A0
MOVE A0,@SWSET1,L
MOVE @SWITCH+32,A0,L
ANDI 10H,A0
MOVE A0,@SWSET2,L
PCPUTMP1
MOVE @SWITCH,A0,L ; GOTTA SEE IF TIME TO LEAVE
MOVE @SWSET1,A1,L
ANDI 86241010H,A0
CMP A0,A1
JRNZ PCPURET
MOVE @SWITCH+32,A0,L
ANDI 10H,A0
MOVE @SWSET2,A1,L
CMP A0,A1
JRNZ PCPURET
JRUC PCPUTMP1
PCPUGOOD
PAUSE 200000H,B6 ; GIVE THE GUY A GLIMPSE
PCPURET
JRUC PONTEST
WAIT DSJS B6,WAIT
WAIT1
MOVE @SWITCH,A0,L
BTST 20,A0
JREQ WAIT1
RETS
PONTEST
FCALL DSCRCLR,B6
GO_RED MOVI >7C00,A1
MOVE A1,@COLRAM,W
MOVI 4000000,B6
CALLR WAIT
GO_GREEN MOVI >3A0,A1
MOVE A1,@COLRAM,W
MOVI 4000000,B6
CALLR WAIT
GO_BLUE MOVI >1F,A1
MOVE A1,@COLRAM,W
MOVI 4000000,B6
CALLR WAIT
CLR A1
MOVE A1,@COLRAM,W
*SCREEN CONVERGENCE
FCALL DSCRCLR,B6
CALLA CONV_PLOT
MOVI 4000000,B6
CALLR WAIT
*COLOR BARS
FCALL DSCRCLR,B6
CALLA COLORBAR
MOVI 4000000,B6
CALLR WAIT
*SWITCH TEST
FCALL DSCRCLR,B6
CALLA SWITCHTEST
JRUC SETUP
; MOVI 0FFFBH,A0
; MOVI SYSCINIT,A0
; MOVE A0,@SYSCOPY,W
; MOVE A0,@SYSCTRL,W
; JAUC POWERRET
**************************************************************************
* *
* MONITOR STUFF *
* *
**************************************************************************
CONV_PLOT:
MOVI MON_RECS,A9
CPRLP1
MOVE *A9+,A2,W ; GET COLOR
JRZ CPRDONE
MOVE *A9+,A0,L ; START POINT
MOVE *A9+,A1,L ; DIMENSIONS
FCALL RECTANGLE,B6
JRUC CPRLP1
CPRDONE
MOVI MON_VECS,A9 ; POINT AT VECTOR TABLE
CPVLP1
MOVE *A9+,A2,W ; GET COLOR
JRZ CPVDONE
MOVE *A9+,A0,L ; START POINT
MOVE *A9+,A1,L ; END POINT
FCALL HVLINE,B6
JRUC CPVLP1
CPVDONE
MOVI MON_DOTS,A9 ; POINT AT DOT TABLE
CPDLP1
MOVE *A9+,A1,W ; GET COLOR
JRZ CPDDONE
MOVE *A9+,A0,L ; GET THE POINT
FCALL POINT,B6
JRUC CPDLP1
CPDDONE
RETS
**************************************************************************
* *
* MONITOR TEST DATA AREA *
* *
**************************************************************************
MON_VECS:
VECMAC TROG_WHITE,004,004,390,004
VECMAC TROG_WHITE,004,004,004,250
VECMAC TROG_WHITE,004,250,390,250
VECMAC TROG_WHITE,390,250,390,004
VECMAC TROG_WHITE,060,005,060,250
VECMAC TROG_WHITE,115,005,115,250
VECMAC TROG_WHITE,170,005,170,250
VECMAC TROG_WHITE,225,005,225,250
VECMAC TROG_WHITE,280,005,280,250
VECMAC TROG_WHITE,335,005,335,250
VECMAC TROG_WHITE,005,54,390,54
VECMAC TROG_WHITE,005,103,390,103
VECMAC TROG_WHITE,005,152,390,152
VECMAC TROG_WHITE,005,201,390,201
.LONG 0
MON_RECS:
VECMAC TROG_RED,182,000,030,005 ; TOP
VECMAC TROG_GREEN,182,005,030,006
VECMAC TROG_RED,182,250,030,005 ; BOTTOM
VECMAC TROG_GREEN,182,244,030,006
VECMAC TROG_RED,000,117,005,020 ; LEFT
VECMAC TROG_GREEN,005,117,006,020
VECMAC TROG_RED,390,117,005,020 ; RIGHT
VECMAC TROG_GREEN,384,117,006,020
.LONG 0
MON_DOTS:
DOTMAC TROG_WHITE,032,029
DOTMAC TROG_WHITE,087,029
DOTMAC TROG_WHITE,142,029
DOTMAC TROG_WHITE,197,029
DOTMAC TROG_WHITE,252,029
DOTMAC TROG_WHITE,307,029
DOTMAC TROG_WHITE,362,029
DOTMAC TROG_WHITE,032,078
DOTMAC TROG_WHITE,087,078
DOTMAC TROG_WHITE,142,078
DOTMAC TROG_WHITE,197,078
DOTMAC TROG_WHITE,252,078
DOTMAC TROG_WHITE,307,078
DOTMAC TROG_WHITE,362,078
DOTMAC TROG_WHITE,032,127
DOTMAC TROG_WHITE,087,127
DOTMAC TROG_WHITE,142,127
DOTMAC TROG_WHITE,197,127
DOTMAC TROG_WHITE,252,127
DOTMAC TROG_WHITE,307,127
DOTMAC TROG_WHITE,362,127
DOTMAC TROG_WHITE,032,176
DOTMAC TROG_WHITE,087,176
DOTMAC TROG_WHITE,142,176
DOTMAC TROG_WHITE,197,176
DOTMAC TROG_WHITE,252,176
DOTMAC TROG_WHITE,307,176
DOTMAC TROG_WHITE,362,176
DOTMAC TROG_WHITE,032,225
DOTMAC TROG_WHITE,087,225
DOTMAC TROG_WHITE,142,225
DOTMAC TROG_WHITE,197,225
DOTMAC TROG_WHITE,252,225
DOTMAC TROG_WHITE,307,225
DOTMAC TROG_WHITE,362,225
.LONG 0
PRIMARY_COLORS:
RECTMAC TROG_RED,0,0,395,255
RECTMAC TROG_GREEN,0,0,395,255
RECTMAC TROG_BLUE,0,0,395,255
.LONG 0
COLOR_BARS:
RECTMAC TROG_BLACK, 0, 0, 49, 16
RECTMAC TROG_BLACK, 49, 0, 49, 16
RECTMAC TROG_BLACK, 98, 0, 49, 16
RECTMAC TROG_BLACK, 147, 0, 49, 16
RECTMAC TROG_BLACK, 196, 0, 49, 16
RECTMAC TROG_BLACK, 245, 0, 49, 16
RECTMAC TROG_BLACK, 294, 0, 49, 16
RECTMAC TROG_BLACK, 343, 0, 49, 16
.LONG 0
**************************************************************************
* *
* COLORBAR *
* *
**************************************************************************
COLORBAR:
MOVI INTENSITIES_START, A0, L
MOVI COLRAM+100H,A1, L
MOVK 16, A2 ; 5 BITS / COLOR
MOVK 8, A6 ; # COLOR BARS
CB3
ADDI >F00,A1 ;STEP TO NEXT PALETTE
MOVE *A0+, A3 ; STARTING COLOR
MOVE *A0+, A4 ; COLOR DECREMENT
MOVE A2, A5
CB4 MOVE A3, *A1+
SUB A4, A3
DSJS A5, CB4
DSJS A6, CB3
; =========================
; | DISPLAY COLOR BARS |
; =========================
CLR A14
MOVE A14,@DMAGO ; HALT THE DMA
MOVI 0101H,A14
MOVE A14,A8
MOVI COLOR_BARS, A3, L ; COLOR BAR TABLE
MOVI [16,0], A13, L ; POSITION INCRMENT
MOVI 101H,A12
MOVK 16, A11 ; # INTENSITIES / BAR
MOVK 8,A6 ;THIS MANY BARS
CB6
CLR A2 ; STARTING COLOR
MOVE *A3+,A1,L
JRZ CB8
MOVE A8,@DMACMAP,W ;STUFF PALETTE
MOVE *A3+,A0,L
ADDK 16,A3
MOVE A11,A10
CB7
FCALL RECTANGLE, B6
ADD A13, A0
ADD A12, A2
DSJS A10, CB7
ADD A14,A8 ;NEXT PALETTE PLEASE
DSJ A6,CB6
CB8
CLR A14
MOVE A14,@DMACMAP,W
RETS
INTENSITIES_START:
.WORD 03E0H ; GREEN
.WORD 0040H ; BUMP GREEN
.WORD 7C00H ; RED
.WORD 0800H ; BUMP RED
.WORD 001FH ; BLUE
.WORD 0002H ; BUMP BLUE
.WORD 0000H ; BLACK
.WORD 0000H ; BUMP BLACK
.WORD 7FFFH ; WHITE
.WORD 0842H ; BUMP WHITE
.WORD 7FE0H ; YELLOW
.WORD 0840H ; BUMP YELLOW
.WORD 7C1FH ; PURPLE
.WORD 0802H ; BUMP PURPLE
.WORD 03FFH ; CYAN
.WORD 0042H ; BUMP CYAN
.LONG 0
**************************************************************************
* *
* SWITCHTEST *
* *
* DRAW OUT THE TROG SWITCHES -- A PRETTY PICTURE *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
DONEMASK EQU 00100000H ;TEST SWITCH
;DONEMASK EQU 00240000H ; P1 + P2 START
.BSS DONECNT,32 ; FOR SWITCH TEST
SWITCHTEST:
; CALLA WDOGDIS
MOVI >60000,A13
MOVE A13,@DONECNT,L
CLR A13 ; THE HOLD ME REGISTER
MOVE A13,@SWSET1,L
MOVE A13,@SWSET2,L
MOVI BUT_TABLE,A9
CLR A10
CALLR BUT_PLOT ; PLOT SOME BUTTONS
MOVI JOY_TABLE,A9
CALLR JOY_PLOT ; PLOT THE JOYSTICKS
MOVI STR_TABLE,A9
CALLR STR_PLOT ; PLOT THE STRINGS
MOVI 00B90000H,A0
MOVI 00B90190H,A1
MOVI TROG_WHITE,A2
FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE
SDLOOP
MOVE @SWITCH,A10,L ; GRAB ME A SWITCH REGISTER
NOT A10
MOVE A10,A0
NOT A0
ANDI DONEMASK,A0
CMPI DONEMASK,A0,L ; CHECK FOR DONE
JRNZ SDGO
MOVE @DONECNT,A0,L ;REQUIRE A CERTAIN TIME
DEC A0
MOVE A0,@DONECNT,L
JRNE SDGO
RETS
SDGO
MOVE @SWSET1,A11,L
CMP A11,A10 ; CHECK FOR CHANGES
JRZ SDCK2
MOVE A10,@SWSET1,L
MOVE @SWITCH+32,A10,L
NOT A10
ANDI 0FFH,A10
MOVE A10,@SWSET2,L
JRUC SDPROC
SDCK2
MOVE @SWITCH+32,A10,L
NOT A10
ANDI 0FFH,A10
MOVE @SWSET2,A11,L
CMP A11,A10
JRZ SDLOOP
MOVE A10,@SWSET2,L
SDPROC
CLR A0
MOVE A0,@SCHANGE,W
MOVI BUT_TABLE,A9
CALLR BUT_PLOT
MOVI JOY_TABLE,A9
CALLR JOY_UPDATE ; UPDATE THE JOYSTICK INFO
MOVE @SCHANGE,A0,W
JRZ SDLOOP
MOVI 0FD8BH,A0
MOVE A0,@SOUND,W
MOVI 0FF8BH,A0
MOVE A0,@SOUND,W
JRUC SDLOOP
RETS
**************************************************************************
* *
* JOY_MESS *
* *
* PLOT THE STATUS OF A JOYSTICK AROUND A CIRCLE *
* *
* ENTRY *
* A9 CENTER OF STICK CIRCLE *
* A10 BUTTON MASK *
* A11 COLOR *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
JOY_MESS:
MOVI TROG_BLACK,A3
MOVE A10,A1
ANDI 1,A1 ; CHECK FOR UP
JRZ JM1
MOVE A11,A3 ; SET COLOR
MOVK 1,A14
MOVE A14,@SCHANGE,W
JM1
MOVI UPMESS,A0
MOVE A9,A1 ; CIRCLE CENTER
MOVI 27,A2
SLL 16,A2
SUB A2,A1 ; SUB RADIUS FROM Y
SUBI 7,A1 ; SUB STRING WIDTH FROM X
CLR A2 ; DIRECTION
FCALL STRING,B6
;
MOVI TROG_BLACK,A3
MOVE A10,A1
ANDI 2,A1 ; CHECK FOR DOWN
JRZ JM2
MOVE A11,A3 ; SET COLOR
MOVK 1,A14
MOVE A14,@SCHANGE,W
JM2
MOVI DOWNMESS,A0
MOVE A9,A1 ; CIRCLE CENTER
MOVI 20,A2
SLL 16,A2
ADD A2,A1 ; ADD RADIUS TO Y
SUBI 20,A1 ; SUB STRING WIDTH FROM X
CLR A2 ; DIRECTION
FCALL STRING,B6
;
MOVI TROG_BLACK,A3
MOVE A10,A1
ANDI 4,A1 ; CHECK FOR LEFT
JRZ JM3
MOVK 1,A14
MOVE A14,@SCHANGE,W
MOVE A11,A3
JM3
MOVI LEFTMESS,A0
MOVE A9,A1 ; CIRCLE CENTER
MOVI 5,A2
SLL 16,A2
SUB A2,A1 ; CENTER LETTERS
SUBI 48,A1 ; SUB STRING WIDTH FROM X
CLR A2 ; DIRECTION
FCALL STRING,B6
;
MOVI TROG_BLACK,A3
MOVE A10,A1
ANDI 8,A1 ; CHECK FOR RIGHT
JRZ JM4
MOVK 1,A14
MOVE A14,@SCHANGE,W
MOVE A11,A3
JM4
MOVI RIGHTMESS,A0
MOVE A9,A1 ; CIRCLE CENTER
MOVI 5,A2
SLL 16,A2
SUB A2,A1 ; CENTER LETTERS
ADDI 20,A1 ; ADD STRING WIDTH FROM X
CLR A2 ; DIRECTION
FCALL STRING,B6
RETS
**************************************************************************
* *
* BUT_PLOT *
* *
* PLOT A BUTTON TABLE ON THE SCREEN *
* *
* ENTRY *
* A9 POINTS TO BUTTON TABLE LIST *
* A10 SETTINGS OF THE SWITCH REGISTER *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
BUT_PLOT:
MOVE *A9,A1,L ; XY LOC
JRZ BPDONE
ADDI 32,A9
MOVE *A9,A0,W ; RADIUS
ADDI 16,A9
MOVE *A9,A6,L ; COLOR
ADDI 32,A9
MOVE *A9,A11,L ; GET MASK
ADDI 32,A9 ; MASK
ADDI 16,A9 ; SHIFT COUNT
MOVE *A9,A8,W ; JAMMA EXTEND-O-BIT
JRZ BPLOW
MOVE @SWSET2,A10,L
JRUC BPAND
BPLOW
MOVE @SWSET1,A10,L
BPAND
ADDI 16,A9
AND A10,A11 ; MASK OFF SOMETHING USEFUL
JRZ BPHOLLOW
ADDI CFILL,A6 ; MASK IN THE FILL BITS
JRUC BPCIRC
BPHOLLOW
MMTM SP,A0,A1,A6
MOVI TROG_BLACK,A6
ADDI CFILL,A6
FCALL CIRCLE,B6
MMFM SP,A0,A1,A6
JRUC BPCIRC2
BPCIRC
MOVK 1,A14
MOVE A14,@SCHANGE,W
BPCIRC2
FCALL CIRCLE,B6
JRUC BUT_PLOT
BPDONE
RETS
**************************************************************************
* *
* JOY_PLOT *
* *
* PLOT A BUTTON TABLE ON THE SCREEN *
* *
* ENTRY *
* A9 POINTS TO BUTTON TABLE LIST *
* *
**************************************************************************
JOY_PLOT:
MOVE *A9,A1,L ; XY LOC
JRZ JPDONE
ADDI 32,A9
MOVE *A9,A0,W ; RADIUS
ADDI 16,A9
MOVE *A9,A6,L ; COLOR
ADDI 96,A9
FCALL CIRCLE,B6
JRUC JOY_PLOT
JPDONE
RETS
**************************************************************************
* *
* JOY_UPDATE *
* *
* UPDATE ALL THE STICK INFORMATION *
* *
* ENTRY *
* A9 JOYSTICK TABLE POINTER *
* A10 SWITCH INFORMATION *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
JOY_UPDATE:
MOVE *A9,A1,L ; XY LOC
JRZ JUDONE
ADDI 32,A9
MOVE *A9,A0,W ; RADIUS
ADDI 16,A9
MOVE *A9,A11,L ; COLOR
ADDI 32,A9
MOVE *A9,A6,L ; MASK
ADDI 32,A9
MOVE *A9,A7,W ; SHIFT COUNT
ADDI 16,A9
MOVE *A9,A8,W ; EXTEND-O-BIT FOR JAMMA
JRZ JULOW
MOVE @SWSET2,A10,L
JRUC JUAND
JULOW
MOVE @SWSET1,A10,L
JUAND
ADDI 16,A9
AND A10,A6 ; MASK OFF JOYSTICK BITS
NOT A7
ADDK 1,A7
SRL A7,A6 ; ZERO BASE THE LITTLE SUCKER
MMTM SP,A9,A10
MOVE A1,A9 ; CENTER OF STICK HERE
MOVE A6,A10 ; BUTTON MASK
CALLR JOY_MESS
MMFM SP,A9,A10
JRUC JOY_UPDATE
JUDONE
RETS
**************************************************************************
* *
* STR_PLOT *
* *
* PLOT A STRING TABLE ON THE SCREEN *
* *
* ENTRY *
* A9 POINTS TO STRING TABLE LIST *
* *
**************************************************************************
STR_PLOT:
MOVE *A9,A1,L ; XY LOC
JRZ STDONE
ADDI 32,A9
MOVE *A9,A0,L ; STRING PTR
ADDI 32,A9
MOVE *A9,A3,W ; COLOR
ADDI 16,A9
MOVE *A9,A2,W ; DIRECTION
ADDI 16,A9
FCALL STRING,B6
JRUC STR_PLOT
STDONE
RETS
CFILL EQU 0FFFF0000H
;
; FORMAT
;
; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT
;
BUT_TABLE:
BUT_MAC 107,65,10,TROG_RED,00040000H,0,0 ; P1 START
BUT_MAC 293,65,10,TROG_BLUE,00200000H,0,0 ; P2 START
BUT_MAC 260,199,10,TROG_GREEN,00080000H,0,0 ; SLAM
BUT_MAC 260,222,10,TROG_GREEN,00100000H,0,0 ; TEST
BUT_MAC 260,245,10,TROG_GREEN,01000000H,0,0 ; VIDEO FREEZE
BUT_MAC 30,207,10,TROG_GREEN,00010000H,0,0 ; COIN LEFT
BUT_MAC 75,207,10,TROG_GREEN,00800000H,0,0 ; COIN CENTER
BUT_MAC 120,207,10,TROG_GREEN,00020000H,0,0 ; COIN RIGHT
BUT_MAC 165,207,10,TROG_GREEN,00000020H,0,1 ; FOURTH COIN
BUT_MAC 214,207,10,TROG_GREEN,00400000H,0,0 ; SERVICE CREDIT
.LONG 0
JOY_TABLE
BUT_MAC 65,130,15,CFILL+TROG_RED,0000000FH,0,0 ; P1 MOVE
BUT_MAC 162,130,15,CFILL+TROG_RED,00000F0H,4,0 ; P1 FIRE
BUT_MAC 243,130,15,CFILL+TROG_BLUE,0000F00H,8,0 ; P2 MOVE
BUT_MAC 335,130,15,CFILL+TROG_BLUE,000F000H,12,0 ; P2 FIRE
.LONG 0
STR_TABLE:
STR_MAC 140,15,STSTART,TROG_YELLOW,0 ; SMASH TV SWITCH MESSAGE
STR_MAC 80,82,P1START,TROG_RED,0 ; P1 START
STR_MAC 262,82,P2START,TROG_BLUE,0 ; P2 START
STR_MAC 40,167,P1MOVE,TROG_RED,0 ; P1 MOVE
STR_MAC 135,167,P1FIRE,TROG_RED,0 ; P1 FIRE
STR_MAC 216,167,P2MOVE,TROG_BLUE,0 ; P2 MOVE
STR_MAC 315,167,P2FIRE,TROG_BLUE,0 ; P2 FIRE
STR_MAC 275,196,SLAM,TROG_GREEN,0 ; SLAM
STR_MAC 275,219,TEST,TROG_GREEN,0 ; TEST SWITCH
STR_MAC 275,242,VIDEO,TROG_GREEN,0 ; VIDEO FREEZE
STR_MAC 10,222,LEFTMESS,TROG_GREEN,0 ; LEFT COIN
STR_MAC 46,222,CENTER,TROG_GREEN,0 ; CENTER COIN
STR_MAC 100,222,RIGHTMESS,TROG_GREEN,0 ; RIGHT COIN
STR_MAC 139,222,FOURTH,TROG_GREEN,0
STR_MAC 60,233,COINMESS,TROG_GREEN,0
STR_MAC 193,222,SERVICE1,TROG_GREEN,0 ; SERVICE CREDIT
STR_MAC 197,233,SERVICE2,TROG_GREEN,0 ; SERVICE CREDIT
STR_MAC 110,35,GETOUT1,TROG_WHITE,0 ; GET OUT MESSAGE 1
.LONG 0
GETOUT1
; .STRING "P1 START AND P2 START TO EXIT",0
.STRING "TEST SWITCH OFF TO EXIT",0
.EVEN
STSTART
.STRING "SMASH TV SWITCHES",0
.EVEN
P1START
.STRING "P1 START",0
.EVEN
P2START
.STRING "P2 START",0
.EVEN
LEFTMESS
.STRING "LFT",0
.EVEN
RIGHTMESS
.STRING "RT",0
.EVEN
UPMESS
.STRING "UP",0
.EVEN
DOWNMESS
.STRING "DOWN",0
.EVEN
P1MOVE
.STRING "P1 MOVE",0
.EVEN
P1FIRE
.STRING "P1 FIRE",0
.EVEN
P2MOVE
.STRING "P2 MOVE",0
.EVEN
P2FIRE
.STRING "P2 FIRE",0
.EVEN
COINMESS
.STRING "COIN CHUTES",0
.EVEN
CENTER
.STRING "CENTER",0
.EVEN
FOURTH
.STRING "FOURTH",0
.EVEN
SERVICE1
.STRING "SERVICE",0
.EVEN
SERVICE2
.STRING "CREDIT",0
.EVEN
SLAM
.STRING "SLAM - TILT",0
.EVEN
TEST
.STRING "TEST",0
.EVEN
VIDEO
.STRING "VIDEO FREEZE",0
.EVEN
DMACMESS
.STRING "CHECKING CUSTOM",0
.EVEN
DMABADMESS
.STRING "CUSTOM CHIP U99 BAD",0
.EVEN
ROMCMESS
.STRING "CHECKING ROMS",0
.EVEN
ROMBADMESS
.STRING "ROM CHIPS BAD",0
.EVEN
RAMBADMESS
.STRING "RAM CHIPS BAD",0
.EVEN
CPUGOOD
.STRING "CPU BOARD OK",0
.EVEN
CPUWAIT1
CPUPAUSE
.STRING "PRESS ANY BUTTON",0
.EVEN
**************************************************************************
* *
* CPUDRAW *
* *
* PLOT THE CPU BOARD AND DRAW ALL THE CHIPS *
* *
* ENTRY *
* B5 RETURN ADDRESS *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
CPUDRAW:
MOVI CPU_VECS,A9 ; POINT AT VECTOR TABLE
CPUDLP1
MOVE *A9+,A2,W ; GET COLOR
JRZ CPUD1
MOVE *A9+,A0,L ; START POINT
MOVE *A9+,A1,L ; END POINT
FCALL HVLINE,B6
JRUC CPUDLP1
CPUD1
MOVE B5,A13
FCALL CHIPPLOT,B5 ; PLOT ALL THE CHIPS
MOVE A13,B5
FRET B5
**************************************************************************
* *
* CHIPTABLE *
* *
* UPDATE A LIST OF CHIPS, BASED ON THEIR VALUES IN A12 *
* *
* ENTRY *
* A9 POINTER TO TABLE *
* A12 LIST OF ON/OFF BITS *
* B5 RETURN ADDRESS *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
CHIPTABLE:
MOVE B5,A14
CTABLOOP
MOVE *A9+,A10,L ; GET POINTER TO CHIP RECORD
JRZ CTABDONE
MOVK 1,A11
MOVE *A10(CMNUM),A0,W ; GET THE BIT NUMBER
BTST A0,A12 ; CHECK BIT NUMBER
JRZ CTABL2
MOVK 2,A11
CTABL2
FCALL CHIPOUT,B5
JRUC CTABLOOP
CTABDONE
MOVE A14,B5
FRET B5
**************************************************************************
* *
* CHIPPLOT *
* *
* PLOT OUT THE CHIP LIST *
* *
* ENTRY *
* B5 RET VALUE *
* *
* EXIT *
* NOTHING *
**************************************************************************
CHIPPLOT:
MOVE B5,A14
MOVI CPU_CHIPS,A10
CPPLOTLOOP
CLR A11
MOVE *A10,A0,L
JRZ CPPLOTDONE
FCALL CHIPOUT,B5
ADDI CMEND,A10
JRUC CPPLOTLOOP
CPPLOTDONE
MOVE A14,B5
FRET B5
**************************************************************************
* *
* CHIPOUT *
* *
* ACTUALLY PLOT THE CHIP *
* *
* ENTRY *
* A10 POINTS TO CHIP TO PLOT *
* A11 COLOR OF CHIP *
* 00 = OUTLINE *
* 01 = GREEN *
* 02 = RED *
* 03 = GREY *
* *
* EXIT *
* A10 IS INTACT *
* *
**************************************************************************
CHIPOUT:
MOVE *A10(CMLOC),A5,L ; CHIP OUTLINE
MOVE A5,A6
MOVE A5,A7
MOVE A5,A8
MOVE *A10(CMXSIZE),A0,W
ADD A0,A6
ADD A0,A7
MOVE *A10(CMYSIZE),A0,W
SLL 16,A0
ADD A0,A7
ADD A0,A8
MOVE A5,A0
MOVE A6,A1
MOVI TROG_WHITE,A2
FCALL HVLINE,B6
MOVE A6,A0
MOVE A7,A1
MOVI TROG_WHITE,A2
FCALL HVLINE,B6
MOVE A8,A0
MOVE A7,A1
MOVI TROG_WHITE,A2
FCALL HVLINE,B6
MOVE A5,A0
MOVE A8,A1
MOVI TROG_WHITE,A2
FCALL HVLINE,B6
;
MOVE *A10(CMSTUFFED),A0,W ; CHECK FOR STUFFED
JRNZ CONOSTUF
MOVK 3,A11 ; WANT IT GREY, DUDE
CONOSTUF
MOVE A11,A11 ; CHECK FOR FILLING THE CHIP
JRZ CONOFILL
MOVE *A10(CMLOC),A0,L
ADDI 00010001H,A0
MOVE *A10(CMSIZE),A1,L
SUBI 00010001H,A1 ; GET INTERNAL AREA
MOVE A11,A2
SLL 4,A2
ADDI CHIPCOLORS,A2
MOVE *A2,A2,W ; GET ME A COLOR
FCALL RECTANGLE,B6
CONOFILL
MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION
MOVE A5,A0
ADD A1,A0
MOVI TROG_WHITE,A1
FCALL POINT,B6
MOVE *A10(CMSTRING),A0,L ; CHIP TEXT
MOVE A5,A1
MOVE *A10(CMOFFSET),A2,L
ADD A2,A1
MOVE *A10(CMDIR),A2,W
MOVI TROG_BLACK,A3
MOVE A11,A11 ; CHECK FOR COLOR
JRNZ COBLACK
MOVI TROG_WHITE,A3
COBLACK
FCALL STRING,B6
FRET B5
CHIPCOLORS:
.WORD TROG_BLACK
.WORD TROG_GREEN
.WORD TROG_RED
.WORD TROG_GREY
**************************************************************************
* *
* DMACHECK *
* *
* CHECK THE DMA OUT *
* *
* ENTRY *
* B5 RETURN ADDRESS *
* *
* EXIT *
* A0 DMA STATUS *
* 0 = GOOD *
* 1 = BAD *
* *
**************************************************************************
DMACHECK
MOVI [1,448],A14,L ; BLOW OUT TRADEMARK
MOVE A14,@DMAHSIZE,1
CLR A14
MOVE A14,@DMAOFFST ; OFFSET
MOVE A14,@DMACONST, 0 ; CONSTANT
MOVE A14,@DMAHORIZ, 1 ; CLEAR DESTINATION ADDRESS
MOVE A14,@DMASAGL, 1
MOVI 257,A14
MOVE A14,@DMAVERT,W ; NEAT NEW VERTICAL ADDRESS
MOVI 0505H,A14
MOVE A14,@DMACMAP, 0
MOVI 8003H,A14 ; USE IMAGE ROM - WRITE ALWAYS
MOVE A14,@DMACTRL, 0
MOVI 7FFFH,A14
DMACWAIT
MOVE @DMACTRL,A0,W ;DMA BUSY?
JRNN DMADONE
DSJS A14,DMACWAIT
JRUC DMACBAD ; DMA TIMED OUT
DMADONE
CLR A0 ; GET BACK TO A REAL PALETTE
MOVE A0,@DMACMAP,0
MOVI 0101000H,A0 ; LOCATION
MOVI 2000000H,A1 ; DMA LOGO LOCATION
MOVI 448,A2 ; NUMBER OF BYTES TO COMPARE
DMACLOOP
MOVB *A0,A3
ANDI 0FH,A3 ; MASK, SINCE IT IS 4 BITS, DUDE!
MOVB *A1,A4
ANDI 0FH,A4 ; WELL, WE KNOW WHAT IT SHOULD BE, BUT...
ADDK 8,A0
ADDK 8,A1
CMP A3,A4
JRNZ DMACBAD
DSJS A2,DMACLOOP
;
; NOW CHECK OUT THE PALETTE END OF THINGS
;
MOVI PAL_SELECT, A13
MOVE A13,@SYSCTRL,W ; ENABLE PALETTE
MOVI 0101000H,A0 ; LOCATION
MOVI 224,A2 ; NUMBER OF BYTES TO COMPARE
DMACLOOP2
MOVE *A0+,A3,W
ANDI 0F0FH,A3
CMPI 0505H,A3
JRNZ DMACBAD
DSJS A2,DMACLOOP2
CLR A0
JRUC DMACRET
DMACBAD
CLR A0 ; GET BACK TO A REAL PALETTE
MOVE A0,@DMACTRL,W
MOVE A0,@DMACMAP,W
MOVK 1,A0
DMACRET
MOVI 0FFFCH,A13
MOVE A13,@SYSCTRL,W
MOVE A0,A0
FRET B5
**************************************************************************
* *
* RAMCHECK *
* *
* CHECK A BANK OF RAM, GIVEN A STARTING TABLE ADDRESS *
* *
* ENTRY *
* A14 POINTER TO RAM TABLE *
* B5 RETURN ADDRESS *
* *
* EXIT *
* B0 LIST OF ERRORS *
* *
**************************************************************************
RAMCHECK:
SETF 16, 0, 0
SETF 32, 0, 1
; SNAG NEXT CHIP RECORD
RAMLOOP:
CLR B2
MOVE *A14(RAM_SADR),A12,L ; STARTING ADDRESS
MOVE *A14(RAM_EADR),A13,L ; ENDING ADDRESS
MOVE *A14(RAM_ITLV),A11,W ; INTERLEAVE
MOVE *A14(RAM_WDTH),A10,W ; WIDTH
; CELL COUNT
SUB A12, A13 ; (END-START)/INTERLEAVE+1
DIVU A11, A13
INC A13
; SET FIELD SIZES
MOVE A11, A9 ; FS1 = INTERLEAVE
ANDI ZERO_EXTEND, A9
EXGF A9, 1
MOVE A10, A9 ; FS0 = WIDTH
ANDI ZERO_EXTEND, A9
EXGF A9, 0
; FILL IN ASCENDING ORDER
MOVE A13, A9 ; XEROX COUNT
MOVE A12, A8 ; XEROX START
MOVI RANDOM_SEED, A7, L
CLR A5
RAC1: SLA 1, A7 ; GENERATE A PSEUDO
JRV RAC2 ; RANDOM NUMBER
ORI 2, A7
RAC2: MOVE A7, A6
ADDC A5, A6
MOVE A6, *A8+, 1 ; WRITE
DSJS A9, RAC1
; READBACK IN ASCENDING ORDER
MOVE A13, A9 ; XEROX COUNT
MOVE A12, A8 ; XEROX START
MOVI RANDOM_SEED, A7, L
RAC3: SLA 1, A7 ; GENERATE A PSEUDO
JRV RAC4 ; RANDOM NUMBER
ORI 2, A7
RAC4: MOVE A7, A6
ADDC A5, A6
MOVE *A8+, A4, 1 ; READ
ZEXT A6
ZEXT A4
CMP A6, A4
JRZ RAC5
;
; GOT AN ERROR HERE
;
SETF 16, 0, 0 ; RESET FIELDS
SETF 32, 0, 1
MOVE *A14(RAM_NMBR),A4,W ; GET BIT NUMBER TO SET
MOVE A4,B1
MOVK 1,B2
SLL B1,B2
OR B2,B0 ; SET THAT BIT
JRUC RAC6 ; BREAK !!
RAC5: DSJS A9, RAC3
RAC6: SETF 16, 0, 0 ; RESET FIELDS
SETF 32, 0, 1
;
; B1 SHOULD BE ZERO IF THE CHIP IS COOL HERE
;
MOVE *A14(RAM_LINK),A10,L
JRZ RAMNOPLOT
MOVK 1,A11
MOVE B2,B2
JRZ RAMPLOT
MOVK 2,A11
RAMPLOT
MOVE B5,A9 ; I HOPE THIS ONE IS SAFE!
MOVE B0,A13
FCALL CHIPOUT,B5
MOVE A13,B0
MOVE A9,B5
RAMNOPLOT
ADDI RAM_SIZE,A14 ; ADVANCE TO NEXT GUY
MOVE *A14,A7,W
JRNZ RAMLOOP ; HERE WE GO AGAIN
FRET B5
**************************************************************************
* *
* ROM STUFF *
* *
**************************************************************************
ROMCHECK:
ROMLOOP
CLR B2
MOVE *A14(ROM_CKSM),A13,L ; CHECK TO SEE IF ROM SOCKET THERE
JRZ ROMEMPTY
CLR A8 ; CHECKSUM
MOVE *A14(ROM_SADR),A12,L ; STARTING ADDRESS
MOVE *A14(ROM_EADR),A13,L ; ENDING ADDRESS
MOVE *A14(ROM_ITLV),A11,W ; INTERLEAVE
MOVE *A14(ROM_WDTH),A10,W ; WIDTH
JRZ PROG_ROM
;
; SUM UP A GIVEN IMAGE ROM -- THIS IS ONLY FOR 4BIT SYSTEMS
;
SUB A12,A13 ; ( EADDR - SADDR ) / 32 + 1
MOVK 32,A0
DIVU A0,A13
INC A13
SLL 1,A11 ;ADJUST SHIFT FOR TYPE
NEG A11
;
;
RCILP
MOVE *A12+,A7,L
SRL A11,A7
MOVE A7,A0
ANDI 00000003H,A0 ; BITS 1-0
MOVE A0,A1 ; FIRST TWO BITS
MOVE A7,A0
ANDI 00000300H,A0
SRL 6,A0
OR A0,A1 ; BITS 3-2
MOVE A7,A0
ANDI 000030000H,A0
SRL 12,A0
OR A0,A1 ; BITS 5-4
MOVE A7,A0
ANDI 03000000H,A0
SRL 18,A0
OR A0,A1 ; BITS 7-6
RCILDONE
ADD A1,A8
DSJ A13,RCILP
JRUC ROMCKCK
PROG_ROM
SUB A12,A13 ; ( EADDR - SADDR ) / 32 + 1
*** MOVK 8,A0
*** DIVU A0,A13
SRL 4,A13
INC A13
RCPLP
MOVB *A12,A7
SLL 24,A7
SRL 24,A7
ADDK 16,A12
ADD A7,A8
DSJS A13,RCPLP
ROMCKCK
MOVE *A14(ROM_CKSM),A7,W
ZEXT A7
ZEXT A8
**** ANDI 0FFFFH,A7
CMP A7,A8
JRZ ROMRELOOP
MOVE *A14(ROM_NMBR),A4,W ; GET BIT NUMBER TO SET
MOVE A4,B1
MOVK 1,B2
SLL B1,B2
OR B2,B0 ; SET THAT BIT
ROMRELOOP
MOVE *A14(ROM_LINK),A10,L
JRZ ROMNOPLOT
MOVK 1,A11
MOVE B2,B2
JRZ ROMPLOT
MOVK 2,A11
ROMPLOT
MOVE B5,A9 ; I HOPE THIS ONE IS SAFE!
MOVE B0,A13
FCALL CHIPOUT,B5
MOVE A13,B0
MOVE A9,B5
ROMNOPLOT
ADDI ROM_SIZE,A14
JRUC ROMLOOP
;
ROMEMPTY
FRET B5
;****************************************************************************
;* INITCOLR: INITIALIZE COLORS; ROUTINE LOADS PALETTE 0 WITH THE COLOR *
;* PALETTE USED BY DIAGNOSTIC TESTS. *
;****************************************************************************
INITCOLR:
;
; KLUDGE TO LOAD DUXPAL IN PALETTE SLOT 0
;
MOVI COLRAM,A0,L ; PALETTE LOCATION
MOVI DUXPAL,A1,L
MOVE *A1+,A2,W ; LENGTH OF PALETTE
LPLP1
MOVE *A1+,*A0+,W
DSJS A2,LPLP1 ; KEEP ON CHUGGIN, BABY
CLR A14
MOVE A14, @CMAPSEL
FRET B5
;****************************************************************************
;* POINT: FUNCTION DISPLAYS A POINT OF ANY COLOR. *
;* *
;* ENTRY: A0 = XY SCREEN ADDRESS OF THE POINT *
;* A1 = COLOR VALUE *
;* B6 = RETURN ADDRESS *
;* *
;* USES: A0, A1, B2, B3, B4, B6, B10 *
;****************************************************************************
POINT:
MOVI SCRN_PTCH, DPTCH
CLR OFFSET
LMO DPTCH, B10
MOVE B10, @CONVDP
PIXT A1, *A0.XY
FRET B6
;****************************************************************************
;* RECTANGLE: FUNCTION DISPLAYS A RECTANGLE OF ANY COLOR. *
;* *
;* ENTRY: A0 = XY SCREEN ADDRESS OF UPPER LEFT CORNER *
;* A1 = XY RECTANGLE DIMENSIONS *
;* A2 = COLOR VALUE *
;* *
;* B6 = RETURN ADDRESS *
;* *
;* USES: A0, A1, A2, B2, B3, B4, B6, B7, B9, B10 *
;****************************************************************************
RECTANGLE:
MOVI SCRN_PTCH, DPTCH
CLR OFFSET
LMO DPTCH, B10
MOVE B10, @CONVDP
MOVE A2, COLOR1
MOVE A0, DADDR
MOVE A1, DYDX
FILL XY
FRET B6
;****************************************************************************
;* LINE: FUNCTION DRAWS HORIZONTAL OR VERTICAL LINES OF ANY COLOR. *
;* *
;* ENTRY: A0 = BEGINNING XY SCREEN ADDRESS *
;* A1 = ENDING XY SCREEN ADDRESS *
;* A2 = COLOR VALUE *
;* *
;* B6 = RETURN ADDRESS *
;* *
;* USES: A0, A1, A2, A3, A4, B3, B4, B6, B9, B10 *
;****************************************************************************
HVLINE:
; CLR A0
; CLR A1
;HVL1
; MOVE A2,*A0+
; MOVI 100,A3
;LLL DSJS A3,LLL
; DSJS A1,HVL1
MOVI SCRN_PTCH, DPTCH
CLR OFFSET
LMO DPTCH, B10
MOVE B10, @CONVDP
MOVE A2, COLOR1
MOVK 1H, A2 ; DRAV DX: ASSUME HORIZONTAL LINE
MOVE A0, A3 ; DETERMINE (P2 > P1) OR (P2 < P1)
CVXYL A3, A3
MOVE A1, A4
CVXYL A4, A4
CMP A3, A4 ; IF (P2 < P1) ~(INCREMENT)
JRP $100
NEG A2 ; INCREMENT IS A SIGNED WORD
ZEXT A2, 0
$100: CMPXY A0, A1 ; IF VERTICAL LINE
JRZ $110 ; DRAV DX -> DRAV DY
SLL 16, A2
$110: DRAV A2, A0 ; DRAW LINE
CMPXY A0, A1
JRNN $110
JRNZ $110
FRET B6
;****************************************************************************
;* STRING: FUNCTION DISPLAYS AN ASCIZ STRING OF ANY COLOR EITHER VERTICALLY *
;* OR HORIZONTALLY. *
;* *
;* ENTRY: A0 = STARTING STRING ADDRESS *
;* A1 = XY SCREEN ADDRESS *
;* A2 = DIRECTION *
;* A3 = COLOR *
;* *
;* B6 = RETURN ADDRESS *
;* *
;* USES: A0 - A6, B0 - B4, B6 - B14 *
;****************************************************************************
STRING:
MOVI SCRN_PTCH, DPTCH
CLR OFFSET
LMO DPTCH, B10
MOVE B10, @CONVDP
MOVE A3, COLOR1
CLR COLOR0
$200: MOVB *A0, A4 ; GET CHARACTER
JRZ $230 ; QUIT IFF NULL
ADDK 8,A0
SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER
SLL 3, A4
ADDI SYSFONT,A4,L
MOVB *A4,A4
SLL 5,A4
ADDI T2_SP,A4
MOVE *A4+,A5 ; CHAR DIMENSIONS
MOVE A5,A6 ; SPLIT UP BYTE
SLL 12,A6 ;SHIFT UP HEIGHT TO Y
SLL 28,A5 ;STRIP AWAY HEIGHT
SRL 28,A5
MOVY A6,A5
RL 16,A5
MOVE A5,DYDX
CLR A6 ; A6 = CHAR WIDTH
MOVX A5, A6
ADDK 7, A6 ; ROUND UP WIDTH TO INTEGRAL NUMBER
SRL 3, A6 ; OF BYTES = SOURCE PITCH
SLL 3, A6
MOVE A6, SPTCH
MOVE *A4,A6 ; CHAR DATA
ADDI CBASE,A6
MOVE A6, SADDR
MOVE A1, DADDR
PIXBLT B,XY
CLR A6
MOVE A2, A2
JRZ $210
MOVY A5, A6 ; A1 += (CHAR HEIGHT + SPACING)
SRL 16, A6 ; DIRECTION = DOWN
ADDK 1H, A6
SLL 16, A6
ADD A6, A1
JRUC $200
$210: MOVX A5, A6 ; A1 += (CHAR WIDTH + SPACING)
ADDK 2H, A6 ; DIRECTION = RIGHT
ADD A6, A1
JRUC $200
$230: ; SETF 16, 1, 0
FRET B6
STRINGCENTER:
SETF 8, 0, 0
CLR A1
MOVE A0,A2
SPLLOOP
MOVE *A0+, A4 ; GET THE CHAR
JRZ SPLEND ; END OF STRING
SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER
SLL 5H, A4
ADDI SYSFONT, A4, L
MOVE *A4, A4, 1
MOVE *A4+, A5, 1 ; CHAR DIMENSIONS
MOVE A5, DYDX
CLR A6 ; A6 = CHAR WIDTH
MOVX A5, A6
ADDK 7, A6 ; ROUND UP WIDTH TO INTEGRAL NUMBER
SRL 3, A6 ; OF BYTES = SOURCE PITCH
SLL 3, A6
MOVX A5, A6 ; A1 += (CHAR WIDTH + SPACING)
ADDK 2H, A6 ; DIRECTION = RIGHT
ADD A6, A1
JRUC SPLLOOP
SPLEND
SETF 16, 1, 0
MOVE A2,A0 ; RESTORE STRING ADDRESS
SRL 1,A1
MOVI 200,A2
SUB A1,A2
MOVE A2,A1
FRET B6
;****************************************************************************
;* CIRCLE: FUNCTION DRAWS OUTLINE OR FILLED CIRCLES. *
;* *
;* ENTRY: A0 = radius *
;* A1 = center (Y:X) *
;* A6 = <00:15> = color *
;* A6 = <15:31> = fill: 0=no fill, 1=fill *
;* *
;* USES: A0 - A8, B0, B10 *
;****************************************************************************
CIRCLE:
movi plot8,a7 ; assume no fill
btst 16,a6
jrz CIRC0
movi fill4,a7
CIRC0:
movi SCRN_PTCH,DPTCH ; Restore screen pitch and convdp
MOVI 13h,B10 ; THIS IS FASTER
MOVE B10,@CONVDP
MOVE A6,COLOR1
movi [1,0],DYDX ; Y width always 1
clr a2 ; x = 0
move a0,a3 ; y = r
move a0,a4
sll 1,a4
subk 3,a4
neg a4 ; d = 3 - 2*r
cloop:
cmp a3,a2 ; if x > y, we are done
jrgt done
MOVE A7, B0 ; PLOT ROUTINE
EXGPC B0
move a2,a5 ; x -> a5
btst 31,a4
jrz dpos ; branch if d is positive
; d negative
sll 2,a5 ; 4*x -> a5
addk 6,a5 ; 4*x+6 -> a5
jruc cont
; d positive
dpos:
sub a3,a5 ; x-y -> a5
sll 2,a5 ; 4*(x-y) -> a5
addk 10,a5 ; 4*(x-y)+10 -> a5
subk 1,a3 ; y = y - 1
cont:
add a5,a4 ; d = d + a5
addk 1,a2 ; x = x + 1
jruc cloop
done: FRET B6
plot8:
move a3,a5
neg a5 ; -y into a5; +y in a3
sll 16,a5
sll 16,a3
movx a2,a5 ; a3 = (y:x)
movx a2,a3 ; a5 = (-y:x)
movk 2,a8
put4:
move a1,a0 ; center (Y:X) in a0
addxy a3,a0 ; (cx+x),(cy+y)
pixt a6,*a0.XY
move a1,a0 ; center (Y:X) in a0
addxy a5,a0 ; (cx+x),(cy-y)
pixt a6,*a0.XY
move a1,a0 ; center (Y:X) in a0
subxy a3,a0 ; (cx-x),(cy-y)
pixt a6,*a0.XY
move a1,a0 ; center (Y:X) in a0
subxy a5,a0 ; (cx-x),(cy+y)
pixt A6,*a0.XY
rl 16,a3
rl 16,a5 ; transpose x and y
dsj a8,put4
sra 16,a3 ; restore y
FRET B0
fill4:
move a2,b10 ; x
sll 1,b10 ; 2x
movx b10,DYDX ; delta x = 2x
move a3,a5
neg a5 ; -y into a5 +y in a3
sll 16,a5
sll 16,a3
movx a2,a5 ; a3 = (y:x)
movx a2,a3 ; a5 = (-y:x)
movk 2,a8
put2:
move a1,a0
subxy a5,a0
move a0,DADDR
fill XY
move a1,a0
subxy a3,a0
move a0,DADDR
fill XY
rl 16,a3 ; a3 = (x:y)
rl 16,a5 ; transpose x and y
clr a6
subxy a5,a6
move a6,a5 ; a5 = (-x:y)
move a3,b10 ; y
sll 1,b10 ; 2y
movx b10,DYDX ; delta x = 2y
dsj a8,put2
sra 16,a3 ; restore y
FRET B0
;****************************************************************************
;* ADV_BUTTON: FUNCTION READS THE STATE OF THE ADVANCE BUTTON. *
;* *
;* ENTRY -- B6 = RETURN ADDRESS. *
;* EXIT -- C = SET IFF BUTTON PRESSED. *
;* USES -- B2 *
;****************************************************************************
ADV_BUTTON:
; ===========================
; | ENTRY WITH BUTTON DOWN |
; ===========================
MOVE @COINS, B2
BTST 04, B2
JRNZ ADVANCE_FALSE
; PAUSE ADV_UP_TIME, B2 ;ELIMINATE NOISE POSSIBILITY
MOVE @COINS, B2
BTST 04, B2
JRNZ ADVANCE_FALSE
ADVANCE_TRUE:
SETC
FRET B6
ADVANCE_FALSE:
CLRC
FRET B6
;****************************************************************************
;* ADV_BUTTON_2: FUNCTION READS THE STATE OF THE ADVANCE BUTTON. ROUTINE IS *
;* IDENTICAL TO ADV_BUTTON EXCEPT THAT IT MAY BE CALLED ONLY *
;* WITHIN THE ERROR LED ROUTINE. *
;* *
;* ENTRY -- B3 = RETURN ADDRESS. *
;* EXIT -- C = SET IFF BUTTON PRESSED. *
;* USES -- B2 *
;****************************************************************************
ADV_BUTTON_2
MOVE @COINS, B2
BTST 04, B2
JRNZ ADVANCE_FALSE_2
; PAUSE ADV_UP_TIME, B2 ;ELIMINATE NOISE POSSIBILITY
MOVE @COINS, B2
BTST 04, B2
JRNZ ADVANCE_FALSE_2
ADVANCE_TRUE_2:
SETC
FRET B3
ADVANCE_FALSE_2:
CLRC
FRET B3
**************************************************************************
* *
* ADVANCE_WAIT: FUNCTION RETURNS WHEN THE ADVANCE BUTTON HAS GONE FROM *
* OFF TO ON, WITH DEBOUNCE. *
* USE THIS WHEN WAITING ON THE ADVANCE BUTTON TO CONTINUE. *
* ENTRY -- B6 = RETURN ADDRESS. *
* EXIT -- C = SET IFF BUTTON PRESSED. *
* USES -- B2 *
* *
**************************************************************************
ADVANCE_WAIT:
MOVE @COINS, B2
BTST 04, B2
JRZ ADVANCE_WAIT ;BR = SWITCH IS DOWN
; PAUSE ADV_UP_TIME, B2 ;DEBOUNCE
MOVE @COINS, B2
BTST 04, B2
JRZ ADVANCE_WAIT ;BR = SPURIOUS SWITCH UP
ADVW1
MOVE @COINS, B2
BTST 04, B2
JRNZ ADVW1 ;BR = SWITCH IS UP
; PAUSE ADV_UP_TIME, B2 ;DEBOUNCE
MOVE @COINS, B2
BTST 04, B2
JRNZ ADVW1 ;BR = SWITCH IS UP
FRET B6
*SCRCLR - CLEAR ENTIRE BIT MAP
* USES:B2,B3,B4 CALL WITH B6
DSCRCLR
CLR B2
DSWRITE
CLR B3
MOVE B3,@DMACMAP,0
MOVI SCREEN,B3,L
MOVI (SCRNE-SCREEN)/32,B4,L
SCRLP MOVE B2,*B3+,L
DSJS B4,SCRLP
FRET B6
* VIDEO CONTROL REGISTERS INITIAL VALUES
INITDATA:
.WORD >0015 ; >C0000000 -- hesync
.WORD >002d ; >C0000010 -- heblnk
.WORD >00f3 ; >C0000020 -- hsblnk
.WORD >00fc ; >C0000030 -- htotal
ENDVBLNK EQU >14
.WORD 0003H ; VESYNC
.WORD ENDVBLNK ; VEBLNK
.WORD 0100H+ENDVBLNK ; VSBLNK
.WORD 0120H ; VTOTAL
.WORD 0F010H ; DPYCTL
.word 0FFFCh ;>C0000090 -- dpystrt
.word HSINT ;>C00000A0 -- dpyint * INITIALLY HALF SCREEN
.word 20H ;>C00000B0 -- control
.word 00h ;>C00000C0 -- hstdata
.word 00h ;>C00000D0 -- hstadrl
.word 00h ;>C00000E0 -- hstadrh
.word 00h ;>C00000F0 -- hstctll
.word 00h ;>C0000100 -- hstctlh
.word 00h ;>C0000110 -- intenbl
.word 00h ;>C0000120 -- intpend
.word 00h ;>C0000130 -- convsp
.word 00h ;>C0000140 -- convdp
.word PXSIZE ;>C0000150 -- psize
.word 00h ;>C0000160 -- pmask
.word 00h ;>C0000170 -- RESERVED
.word 00h ;>C0000180 -- RESERVED
.word 00h ;>C0000190 -- RESERVED
.word 00h ;>C00001A0 -- RESERVED
.word 00h ;>C00001B0 -- DPYTAP
IDATAEND:
**************************************************************************
* *
* CPU BOARD INFORMATION *
* *
**************************************************************************
CPU_VECS:
VECMAC TROG_WHITE,5,15,390,15 ; BOARD OUTLINE
VECMAC TROG_WHITE,390,15,390,254
VECMAC TROG_WHITE,5,254,390,254
VECMAC TROG_WHITE,5,15,5,100
VECMAC TROG_WHITE,5,100,15,100
VECMAC TROG_WHITE,15,100,15,115
VECMAC TROG_WHITE,5,115,15,115
VECMAC TROG_WHITE,5,115,5,135
VECMAC TROG_WHITE,5,135,15,135
VECMAC TROG_WHITE,15,135,15,138
VECMAC TROG_WHITE,5,138,15,138
VECMAC TROG_WHITE,5,138,5,215
VECMAC TROG_WHITE,5,215,15,215
VECMAC TROG_WHITE,15,215,15,230
VECMAC TROG_WHITE,5,230,15,230
VECMAC TROG_WHITE,5,230,5,254
.LONG 0
CPUXBASE EQU 5
CPUYBASE EQU 5
CPU_CHIPS:
CRAM1 CHIPMAC 0,100,25,20,40,7,12,CNAME5,1,2,2,1 ; COLOR RAM
CRAM2 CHIPMAC 1,100,70,20,40,7,8,CNAME23,1,2,2,1 ; COLOR RAM
VRAM1 CHIPMAC 2,200,25,15,35,5,5,CNAME10,1,2,2,1 ; BANK 1 VIDEO RAM
VRAM2 CHIPMAC 3,217,25,15,35,5,5,CNAME11,1,2,2,1
VRAM3 CHIPMAC 4,234,25,15,35,5,5,CNAME12,1,2,2,1
VRAM4 CHIPMAC 5,251,25,15,35,5,5,CNAME13,1,2,2,1
VRAM5 CHIPMAC 6,268,25,15,35,5,5,CNAME14,1,2,2,1
VRAM6 CHIPMAC 7,285,25,15,35,5,5,CNAME15,1,2,2,1
VRAM7 CHIPMAC 8,200,70,15,35,5,5,CNAME28,1,2,2,1 ; BANK 2 VIDEO RAM
VRAM8 CHIPMAC 9,217,70,15,35,5,5,CNAME29,1,2,2,1
VRAM9 CHIPMAC 10,234,70,15,35,5,5,CNAME30,1,2,2,1
VRAM10 CHIPMAC 11,251,70,15,35,5,5,CNAME31,1,2,2,1
VRAM11 CHIPMAC 12,268,70,15,35,5,5,CNAME32,1,2,2,1
VRAM12 CHIPMAC 13,285,70,15,35,5,5,CNAME33,1,2,2,1
CPU CHIPMAC 0,330,80,35,35,8,14,CNAME36,0,3,3,1 ; CPU
DMA CHIPMAC 0,320,175,45,40,12,18,CNAME99,0,42,3,1 ; DMA
PROM1 CHIPMAC 0,90,167,20,40,7,8,CNAME89,1,2,2,1 ; PROGRAM ROM 1
PROM2 CHIPMAC 1,90,210,20,40,7,3,CNAME105,1,2,2,1 ; PROGRAM ROM 2
IROM1 CHIPMAC 1,130,167,20,40,7,8,CNAME90,1,2,2,0 ; IMAGE ROM
IROM2 CHIPMAC 2,152,167,20,40,7,8,CNAME91,1,2,2,0 ; IMAGE ROM
IROM3 CHIPMAC 3,174,167,20,40,7,8,CNAME92,1,2,2,0 ; IMAGE ROM
IROM4 CHIPMAC 4,196,167,20,40,7,8,CNAME93,1,2,2,0 ; IMAGE ROM
IROM5 CHIPMAC 5,228,167,20,40,7,8,CNAME95,1,2,2,1 ; IMAGE ROM
IROM6 CHIPMAC 6,250,167,20,40,7,8,CNAME96,1,2,2,1 ; IMAGE ROM
IROM7 CHIPMAC 7,272,167,20,40,7,8,CNAME97,1,2,2,1 ; IMAGE ROM
IROM8 CHIPMAC 8,294,167,20,40,7,8,CNAME98,1,2,2,0 ; IMAGE ROM
IROM9 CHIPMAC 9,130,210,20,40,7,3,CNAME106,1,2,2,1 ; IMAGE ROM
IROM10 CHIPMAC 10,152,210,20,40,7,3,CNAME107,1,2,2,1 ; IMAGE ROM
IROM11 CHIPMAC 11,174,210,20,40,7,3,CNAME108,1,2,2,1 ; IMAGE ROM
IROM12 CHIPMAC 12,196,210,20,40,7,3,CNAME109,1,2,2,0 ; IMAGE ROM
IROM13 CHIPMAC 13,228,210,20,40,7,3,CNAME111,1,2,2,1 ; IMAGE ROM
IROM14 CHIPMAC 14,250,210,20,40,7,3,CNAME112,1,2,2,1 ; IMAGE ROM
IROM15 CHIPMAC 15,272,210,20,40,7,3,CNAME113,1,2,2,1 ; IMAGE ROM
IROM16 CHIPMAC 16,294,210,20,40,7,3,CNAME114,1,2,2,0 ; IMAGE ROM
SRAM1 CHIPMAC 0,30,115,15,35,5,5,CNAME66,1,2,2,1 ; SCRATCH PAD
SRAM2 CHIPMAC 1,47,115,15,35,5,5,CNAME67,1,2,2,1 ; SCRATCH PAD
SRAM3 CHIPMAC 2,64,115,15,35,5,5,CNAME68,1,2,2,1 ; SCRATCH PAD
SRAM4 CHIPMAC 3,81,115,15,35,5,5,CNAME69,1,2,2,1 ; SCRATCH PAD
.LONG 0
VRAMTAB .LONG CRAM1,CRAM2
.LONG VRAM1,VRAM2,VRAM3,VRAM4,VRAM5,VRAM6
.LONG VRAM7,VRAM8,VRAM9,VRAM10,VRAM11,VRAM12
.LONG 0
PROMTAB .LONG PROM1,PROM2
.LONG 0
IROMTAB .LONG IROM1,IROM2,IROM3,IROM4
.LONG IROM5,IROM6,IROM7,IROM8
.LONG IROM9,IROM10,IROM11,IROM12
.LONG IROM13,IROM14,IROM15,IROM16
.LONG 0
SRAMTAB .LONG SRAM1,SRAM2,SRAM3,SRAM4
.LONG 0
CNAME5
.STRING "U5",0
.EVEN
CNAME10
.STRING "U10",0
.EVEN
CNAME11
.STRING "U11",0
.EVEN
CNAME12
.STRING "U12",0
.EVEN
CNAME13
.STRING "U13",0
.EVEN
CNAME14
.STRING "U14",0
.EVEN
CNAME15
.STRING "U15",0
.EVEN
CNAME23
.STRING "U23",0
.EVEN
CNAME28
.STRING "U28",0
.EVEN
CNAME29
.STRING "U29",0
.EVEN
CNAME30
.STRING "U30",0
.EVEN
CNAME31
.STRING "U31",0
.EVEN
CNAME32
.STRING "U32",0
.EVEN
CNAME33
.STRING "U33",0
.EVEN
CNAME36
.STRING "U36",0
.EVEN
CNAME49
.STRING "U49",0
.EVEN
CNAME66
.STRING "U66",0
.EVEN
CNAME67
.STRING "U67",0
.EVEN
CNAME68
.STRING "U68",0
.EVEN
CNAME69
.STRING "U69",0
.EVEN
CNAME89
.STRING "U89",0
.EVEN
CNAME90
.STRING "U90",0
.EVEN
CNAME91
.STRING "U91",0
.EVEN
CNAME92
.STRING "U92",0
.EVEN
CNAME93
.STRING "U93",0
.EVEN
CNAME95
.STRING "U95",0
.EVEN
CNAME96
.STRING "U96",0
.EVEN
CNAME97
.STRING "U97",0
.EVEN
CNAME98
.STRING "U98",0
.EVEN
CNAME99
.STRING "U99",0
.EVEN
CNAME105
.STRING "U105",0
.EVEN
CNAME106
.STRING "U106",0
.EVEN
CNAME107
.STRING "U107",0
.EVEN
CNAME108
.STRING "U108",0
.EVEN
CNAME109
.STRING "U109",0
.EVEN
CNAME111
.STRING "U111",0
.EVEN
CNAME112
.STRING "U112",0
.EVEN
CNAME113
.STRING "U113",0
.EVEN
CNAME114
.STRING "U114",0
.EVEN
CNAME115
.STRING "U115",0
.EVEN
**************************************************************************
* *
* RAM CHIP DATA *
* *
**************************************************************************
;
; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE
;
VRAMCHIPS:
; COLOR RAMS
RAM_CHIP 0,0, 8, 16, 1800008H, 180FFF8H
RAM_CHIP 0,1, 8, 16, 1800000H, 180FFF0H
; VIDEO RAMS
RAM_CHIP 0,10, 4, 32, 0000018H, 01FFFF8H ; U30 ( 24 - 27 )
RAM_CHIP 0,11, 4, 32, 0000010H, 01FFFF0H ; U31 ( 16 - 19 )
RAM_CHIP 0,12, 4, 32, 0000008H, 01FFFE8H ; U32 ( 8 - 11 )
RAM_CHIP 0,13, 4, 32, 0000000H, 01FFFE0H ; U33 ( 0 - 3 )
;RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR
RAM_CHIP 0,2, 2, 32, 000001CH, 01FFFFCH ; U10 ( 28 - 29 )
RAM_CHIP 0,3, 2, 32, 0000014H, 01FFFF4H ; U11 ( 20 - 21 )
RAM_CHIP 0,8, 2, 32, 000000CH, 01FFFECH ; U28 ( 12 - 13 )
RAM_CHIP 0,9, 2, 32, 0000004H, 01FFFE4H ; U29 ( 4 - 5 )
.LONG 0
PALCHIPS:
; VIDEO PALETTE RAMS
RAM_CHIP 0,4, 4, 32, 0000018H, 01FFFF8H ; U12 ( 24 - 27 )
RAM_CHIP 0,5, 4, 32, 0000010H, 01FFFF0H ; U13 ( 16 - 19 )
RAM_CHIP 0,6, 4, 32, 0000008H, 01FFFE8H ; U14 ( 8 - 11 )
RAM_CHIP 0,7, 4, 32, 0000000H, 01FFFE0H ; U15 ( 0 - 3 )
;RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR
RAM_CHIP 0,2, 2, 32, 000001EH, 01FFFFEH ; U10 ( 30 - 31 )
RAM_CHIP 0,3, 2, 32, 0000016H, 01FFFF6H ; U11 ( 22 - 23 )
RAM_CHIP 0,8, 2, 32, 000000EH, 01FFFEEH ; U28 ( 14 - 15 )
RAM_CHIP 0,9, 2, 32, 0000006H, 01FFFE6H ; U29 ( 6 - 7 )
.LONG 0
; SCRATCH RAMS
SRAMCHECK
.STRING "CHECKING SCRATCH RAMS",0
.EVEN
SRAMCHIPS
RAM_CHIP SRAM4,3, 4, 16, 1000000H, 10FFFF0H ; U69 ( 0 - 3 )
RAM_CHIP SRAM3,2, 4, 16, 1000004H, 10FFFF4H ; U68 ( 4 - 7 )
RAM_CHIP SRAM2,1, 4, 16, 1000008H, 10FFFF8H ; U67 ( 8 - 11 )
RAM_CHIP SRAM1,0, 4, 16, 100000CH, 10FFFFCH ; U66 ( 12 - 15 )
.LONG 0
PROMCHIPS
ROM_CHIP PROM1,0,0,0, 0FFE00000H, 0FFFFFFF0H, >015B ; U89
ROM_CHIP PROM2,1,0,0, 0FFE00008H, 0FFFFFFF8H, >6670 ; U105
.LONG 0
.WORD >FEA4,>998F ;CHECKSUM ADJUST
IROMCHIPS
.EVEN
ROM_CHIP IROM13,13, 8, 0, 2000000H, 23FFFFFH, 07458H ; U111
ROM_CHIP IROM5, 5, 8, 1, 2000000H, 23FFFFFH, 0CA5DH ; U95
ROM_CHIP IROM9, 9, 8, 2, 2000000H, 23FFFFFH, 011D1H ; U106
ROM_CHIP IROM14,14, 8, 0, 2400000H, 27FFFFFH, 037E6H ; U112
ROM_CHIP IROM6, 6, 8, 1, 2400000H, 27FFFFFH, 092BCH ; U96
ROM_CHIP IROM10,10, 8, 2, 2400000H, 27FFFFFH, 0C7C2H ; U107
ROM_CHIP IROM15,15, 8, 0, 2800000H, 2BFFFFFH, 0D546H ; U113
ROM_CHIP IROM7, 7, 8, 1, 2800000H, 2BFFFFFH, 05740H ; U97
ROM_CHIP IROM11,11, 8, 2, 2800000H, 2BFFFFFH, 0513FH ; U108
;ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM
.LONG 0 ; FORCE IT TO STOP HERE
ROM_CHIP IROM16,16, 8, 0, 2C00000H, 2FFFFFFH, 0EAFDH ; U114
ROM_CHIP IROM8, 8, 8, 1, 2C00000H, 2FFFFFFH, 0EAFDH ; U98
;
; PROPER ADDRESSING FOR THE FIRST 8 EPROMS ( AT 3000000H )
;
ROM_CHIP IROM1, 1, 8, 3, 3000000H, 33FFFFFH, 0271DH ; U90
ROM_CHIP IROM2, 2, 8, 3, 3400000H, 37FFFFFH, 04EF8H ; U91
ROM_CHIP IROM3, 3, 8, 3, 3800000H, 3BFFFFFH, 0EAFDH ; U92
ROM_CHIP IROM12,12, 8, 2, 3C00000H, 3FFFFFFH, 0EAFDH ; U109
ROM_CHIP IROM4, 4, 8, 3, 3C00000H, 3FFFFFFH, 0EAFDH ; U93
.LONG 0
*
*WATCH DOG DISABLE TABLE
WDISTAB
.WORD 0
.WORD 0
.WORD 0
.WORD 0
.WORD 2
.WORD 0
.WORD 2
.WORD 0
.WORD 0FFFFH
DUXPAL:
.word 10
.word >0,>7C00,>6739,>1F,>35AD,>77A0,>741A,>3A0
.word >0,>10
;****************************************************************************
;* SYSFONT: SYSTEM FONT; MODULE DEFINES THE FONT USED WITH SYSTEM *
;* DIAGNOSTICS. *
;****************************************************************************
.TITLE 'SYSFONT'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
.DEF SYSFONT
.DEF CBASE,T2_SP
; ===========================
; | DYDX CHAR DIMENSIONS |
; | POINTER TO XY CHAR DATA |
; ===========================
T2_SP:
.WORD 048h
.word I2_SP-CBASE
T2_MN:
.WORD 088h
.WORD I2_MN-CBASE
T2_PER:
.WORD 028H
.WORD I2_PER-CBASE
T2_SLASH:
.WORD 068H
.WORD I2_SLASH-CBASE
T2_00:
.WORD 068h
.WORD I2_00-CBASE
T2_11:
.WORD 068h
.WORD I2_11-CBASE
T2_22:
.WORD 068h
.WORD I2_22-CBASE
T2_33:
.WORD 068h
.WORD I2_33-CBASE
T2_44:
.WORD 068h
.WORD I2_44-CBASE
T2_55:
.WORD 068h
.WORD I2_55-CBASE
T2_66:
.WORD 068h
.WORD I2_66-CBASE
T2_77:
.WORD 068h
.WORD I2_77-CBASE
T2_88:
.WORD 068h
.WORD I2_88-CBASE
T2_99:
.WORD 068h
.WORD I2_99-CBASE
T2_AA:
.WORD 068h
.WORD I2_AA-CBASE
T2_BB:
.WORD 068h
.WORD I2_BB-CBASE
T2_CC:
.WORD 068h
.WORD I2_CC-CBASE
T2_DD:
.WORD 068h
.WORD I2_DD-CBASE
T2_EE:
.WORD 068h
.WORD I2_EE-CBASE
T2_FF:
.WORD 068h
.WORD I2_FF-CBASE
T2_GG:
.WORD 068h
.WORD I2_GG-CBASE
T2_HH:
.WORD 068h
.WORD I2_HH-CBASE
T2_II:
.WORD 028h
.WORD I2_II-CBASE
T2_JJ:
.WORD 068h
.WORD I2_JJ-CBASE
T2_KK:
.WORD 068h
.WORD I2_KK-CBASE
T2_LL:
.WORD 058h
.WORD I2_LL-CBASE
T2_MM:
.WORD 0A8h
.WORD I2_MM-CBASE
T2_NN:
.WORD 078h
.WORD I2_NN-CBASE
T2_OO:
.WORD 078h
.WORD I2_OO-CBASE
T2_PP:
.WORD 068h
.WORD I2_PP-CBASE
T2_QQ:
.WORD 07Ah
.WORD I2_QQ-CBASE
T2_RR:
.WORD 068h
.WORD I2_RR-CBASE
T2_SS:
.WORD 068h
.WORD I2_SS-CBASE
T2_TT:
.WORD 068h
.WORD I2_TT-CBASE
T2_UU:
.WORD 068h
.WORD I2_UU-CBASE
T2_VV:
.WORD 078h
.WORD I2_VV-CBASE
T2_WW:
.WORD 0B8h
.WORD I2_WW-CBASE
T2_XX:
.WORD 078h
.WORD I2_XX-CBASE
T2_YY:
.WORD 068h
.WORD I2_YY-CBASE
T2_ZZ:
.WORD 068h
.WORD I2_ZZ-CBASE
; ===========================
; | CHARACTER DIRECTORY |
; ===========================
SYSFONT:
.BYTE (T2_SP-T2_SP)/32 ; SPACE CHARACTER, " "
.BYTE (T2_SP-T2_SP)/32 ; FILLER
.BYTE (T2_SP-T2_SP)/32
.BYTE (T2_SP-T2_SP)/32
.BYTE (T2_SP-T2_SP)/32
.BYTE (T2_SP-T2_SP)/32
.BYTE (T2_SP-T2_SP)/32
.BYTE (T2_SP-T2_SP)/32
.BYTE (T2_SP-T2_SP)/32
.BYTE (T2_SP-T2_SP)/32
.BYTE (T2_SP-T2_SP)/32
.BYTE (T2_SP-T2_SP)/32
.BYTE (T2_SP-T2_SP)/32
.BYTE (T2_MN-T2_SP)/32 ; MINUS CHARACTER, "-"
.BYTE (T2_PER-T2_SP)/32
.BYTE (T2_SLASH-T2_SP)/32 ; "/"
.BYTE (T2_00-T2_SP)/32 ;0
.BYTE (T2_11-T2_SP)/32 ;1
.BYTE (T2_22-T2_SP)/32 ;2
.BYTE (T2_33-T2_SP)/32 ;3
.BYTE (T2_44-T2_SP)/32 ;4
.BYTE (T2_55-T2_SP)/32 ;5
.BYTE (T2_66-T2_SP)/32 ;6
.BYTE (T2_77-T2_SP)/32 ;7
.BYTE (T2_88-T2_SP)/32 ;8
.BYTE (T2_99-T2_SP)/32 ;9
.BYTE (T2_00-T2_SP)/32 ; no :
.BYTE (T2_00-T2_SP)/32 ; no ;
.BYTE (T2_00-T2_SP)/32 ; no <
.BYTE (T2_00-T2_SP)/32 ; no =
.BYTE (T2_00-T2_SP)/32 ; no >
.BYTE (T2_00-T2_SP)/32 ; no ?
.BYTE (T2_00-T2_SP)/32 ; no @
.BYTE (T2_AA-T2_SP)/32 ;A
.BYTE (T2_BB-T2_SP)/32 ;B
.BYTE (T2_CC-T2_SP)/32 ;C
.BYTE (T2_DD-T2_SP)/32 ;D
.BYTE (T2_EE-T2_SP)/32 ;E
.BYTE (T2_FF-T2_SP)/32 ;F
.BYTE (T2_GG-T2_SP)/32 ;G
.BYTE (T2_HH-T2_SP)/32 ;H
.BYTE (T2_II-T2_SP)/32 ;I
.BYTE (T2_JJ-T2_SP)/32 ;J
.BYTE (T2_KK-T2_SP)/32 ;K
.BYTE (T2_LL-T2_SP)/32 ;L
.BYTE (T2_MM-T2_SP)/32 ;M
.BYTE (T2_NN-T2_SP)/32 ;N
.BYTE (T2_OO-T2_SP)/32 ;O
.BYTE (T2_PP-T2_SP)/32 ;P
.BYTE (T2_QQ-T2_SP)/32 ;Q
.BYTE (T2_RR-T2_SP)/32 ;R
.BYTE (T2_SS-T2_SP)/32 ;S
.BYTE (T2_TT-T2_SP)/32 ;T
.BYTE (T2_UU-T2_SP)/32 ;U
.BYTE (T2_VV-T2_SP)/32 ;V
.BYTE (T2_WW-T2_SP)/32 ;W
.BYTE (T2_XX-T2_SP)/32 ;X
.BYTE (T2_YY-T2_SP)/32 ;Y
.BYTE (T2_ZZ-T2_SP)/32 ;Z
; ===========================
; | CHARACTER DEFINITIONS |
; ===========================
CBASE:
I2_SP:
.byte 00h
.byte 00h
.byte 00h
.byte 00h
.byte 00h
.byte 00h
.byte 00h
.byte 00h
I2_MN:
.byte 000h
.byte 000h
.byte 000h
.byte 0FFh
.byte 0FFh
.byte 000h
.byte 000h
.byte 000h
I2_PER:
.BYTE 0
.BYTE 0
.BYTE 0
.BYTE 0
.BYTE 0
.BYTE 0
.BYTE 0FFH
.BYTE 0FFH
I2_SLASH:
.BYTE 30H
.BYTE 30H
.BYTE 18H
.BYTE 18H
.BYTE 06H
.BYTE 06H
.BYTE 03H
.BYTE 03H
I2_00:
.byte 01Eh
.byte 03Fh
.byte 033h
.byte 033h
.byte 033h
.byte 033h
.byte 03Fh
.byte 01Eh
I2_11:
.byte 0Eh
.byte 0Fh
.byte 0Fh
.byte 0Ch
.byte 0Ch
.byte 0Ch
.byte 0Ch
.byte 0Ch
I2_22:
.byte 01Fh
.byte 03Fh
.byte 038h
.byte 01Ch
.byte 0Eh
.byte 07h
.byte 03Fh
.byte 03Fh
I2_33:
.byte 01Fh
.byte 03Fh
.byte 030h
.byte 01Eh
.byte 01Eh
.byte 030h
.byte 03Fh
.byte 01Fh
I2_44:
.byte 038h
.byte 03Ch
.byte 036h
.byte 033h
.byte 03Fh
.byte 03Fh
.byte 030h
.byte 030h
I2_55:
.byte 03Fh
.byte 03Fh
.byte 03h
.byte 01Fh
.byte 03Fh
.byte 030h
.byte 03Fh
.byte 01Fh
I2_66:
.byte 03Eh
.byte 03Fh
.byte 03h
.byte 01Fh
.byte 03Fh
.byte 033h
.byte 03Fh
.byte 01Eh
I2_77:
.byte 03Fh
.byte 03Fh
.byte 030h
.byte 018h
.byte 018h
.byte 0Ch
.byte 0Ch
.byte 0Ch
I2_88:
.byte 01Eh
.byte 03Fh
.byte 033h
.byte 01Eh
.byte 01Eh
.byte 033h
.byte 03Fh
.byte 01Eh
I2_99:
.byte 01Eh
.byte 03Fh
.byte 033h
.byte 03Fh
.byte 03Eh
.byte 030h
.byte 03Fh
.byte 01Fh
I2_AA:
.byte 01Eh
.byte 03Fh
.byte 033h
.byte 033h
.byte 03Fh
.byte 03Fh
.byte 033h
.byte 033h
I2_BB:
.byte 01Fh
.byte 03Fh
.byte 033h
.byte 03Fh
.byte 01Fh
.byte 033h
.byte 03Fh
.byte 01Fh
I2_CC:
.byte 03Eh
.byte 03Fh
.byte 03h
.byte 03h
.byte 03h
.byte 03h
.byte 03Fh
.byte 03Eh
I2_DD:
.byte 01Fh
.byte 03Fh
.byte 033h
.byte 033h
.byte 033h
.byte 033h
.byte 03Fh
.byte 01Fh
I2_EE:
.byte 03Fh
.byte 03Fh
.byte 03h
.byte 03Fh
.byte 03Fh
.byte 03h
.byte 03Fh
.byte 03Fh
I2_FF:
.byte 03Fh
.byte 03Fh
.byte 03h
.byte 03Fh
.byte 03Fh
.byte 03h
.byte 03h
.byte 03h
I2_GG:
.byte 03Eh
.byte 03Fh
.byte 03h
.byte 03h
.byte 033h
.byte 033h
.byte 03Fh
.byte 01Eh
I2_HH:
.byte 033h
.byte 033h
.byte 033h
.byte 03Fh
.byte 03Fh
.byte 033h
.byte 033h
.byte 033h
I2_II:
.byte 03h
.byte 03h
.byte 03h
.byte 03h
.byte 03h
.byte 03h
.byte 03h
.byte 03h
I2_JJ:
.byte 030h
.byte 030h
.byte 030h
.byte 030h
.byte 030h
.byte 033h
.byte 03Fh
.byte 01Eh
I2_KK:
.byte 033h
.byte 033h
.byte 01Bh
.byte 0Fh
.byte 01Fh
.byte 033h
.byte 033h
.byte 033h
I2_LL:
.byte 03h
.byte 03h
.byte 03h
.byte 03h
.byte 03h
.byte 03h
.byte 01Fh
.byte 01Fh
I2_MM:
.byte 087h,03h
.byte 0CFh,03h
.byte 0CFh,03h
.byte 07Bh,03h
.byte 07Bh,03h
.byte 033h,03h
.byte 033h,03h
.byte 033h,03h
I2_NN:
.byte 063h
.byte 067h
.byte 06Fh
.byte 06Fh
.byte 07Bh
.byte 07Bh
.byte 073h
.byte 063h
I2_OO:
.byte 03Eh
.byte 07Fh
.byte 063h
.byte 063h
.byte 063h
.byte 063h
.byte 07Fh
.byte 03Eh
I2_PP:
.byte 01Fh
.byte 03Fh
.byte 033h
.byte 03Fh
.byte 01Fh
.byte 03h
.byte 03h
.byte 03h
I2_QQ:
.byte 03Eh
.byte 07Fh
.byte 063h
.byte 063h
.byte 063h
.byte 063h
.byte 07Fh
.byte 03Eh
.byte 060h
.byte 060h
I2_RR:
.byte 01Fh
.byte 03Fh
.byte 033h
.byte 03Fh
.byte 01Fh
.byte 033h
.byte 033h
.byte 033h
I2_SS:
.byte 03Eh
.byte 03Fh
.byte 03h
.byte 01Fh
.byte 03Eh
.byte 030h
.byte 03Fh
.byte 01Fh
I2_TT:
.byte 03Fh
.byte 03Fh
.byte 0Ch
.byte 0Ch
.byte 0Ch
.byte 0Ch
.byte 0Ch
.byte 0Ch
I2_UU:
.byte 033h
.byte 033h
.byte 033h
.byte 033h
.byte 033h
.byte 033h
.byte 03Fh
.byte 01Eh
I2_VV:
.byte 063h
.byte 063h
.byte 063h
.byte 036h
.byte 036h
.byte 03Eh
.byte 01Ch
.byte 01Ch
I2_WW:
.byte 023h,06h
.byte 023h,06h
.byte 073h,06h
.byte 076h,03h
.byte 076h,03h
.byte 0DEh,03h
.byte 08Ch,01h
.byte 08Ch,01h
I2_XX:
.byte 063h
.byte 063h
.byte 036h
.byte 01Ch
.byte 01Ch
.byte 036h
.byte 063h
.byte 063h
I2_YY:
.byte 033h
.byte 033h
.byte 01Eh
.byte 01Eh
.byte 0Ch
.byte 0Ch
.byte 0Ch
.byte 0Ch
I2_ZZ:
.byte 03Fh
.byte 03Fh
.byte 038h
.byte 01Ch
.byte 0Eh
.byte 07h
.byte 03Fh
.byte 03Fh
*
*INITIALIZE ALL 32 TRAP VECTORS
*
BADTRAP
DIRQ
RETI
.SECT "VECTORS"
.LONG BADTRAP ;TRAP 31
.LONG BADTRAP ;TRAP 30 ILLOP --- ILLEGAL OPCODE
.LONG BADTRAP ;TRAP 29
.LONG BADTRAP ;TRAP 28
.LONG BADTRAP ;TRAP 27
.LONG BADTRAP ;TRAP 26
.LONG BADTRAP ;TRAP 25
.LONG BADTRAP ;TRAP 24
.LONG BADTRAP ;TRAP 23
.LONG BADTRAP ;TRAP 22
.LONG BADTRAP ;TRAP 21
.LONG BADTRAP ;TRAP 20
.LONG BADTRAP ;TRAP 19
.LONG BADTRAP ;TRAP 18
.LONG BADTRAP ;TRAP 17
.LONG BADTRAP ;TRAP 16
.LONG BADTRAP ;TRAP 15
.LONG BADTRAP ;TRAP 14
.LONG BADTRAP ;TRAP 13
.LONG BADTRAP ;TRAP 12
.LONG BADTRAP ;TRAP 11 WV --- WINDOW VIOLATION
.LONG DIRQ ;TRAP 10 DI --- DISPLAY INTERRUPT
.LONG BADTRAP ;TRAP 9 HI --- HOST INTERRUPT
.LONG BADTRAP ;TRAP 8 NMI -- NONMASKABLE INTERRUPT
.LONG BADTRAP ;TRAP 7
.LONG BADTRAP ;TRAP 6
.LONG BADTRAP ;TRAP 5
.LONG BADTRAP ;TRAP 4
.LONG BADTRAP ;TRAP 3
.LONG BADTRAP ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2
.LONG BADTRAP ;TRAP 1 INT1 --- EXTERNAL INTERRUPT 1
.LONG SETUP ;TRAP 0 RESET
.END