revolution-x/GXDTST.ASM

5143 lines
116 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.

.MLIB "GXMACS.LIB"
.FILE "GXDTST.ASM"
.TITLE "<<< GENERATION X - DIAGNOSTIC TEST ROUTINES >>>"
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
**************************************************************************
* *
* COPYRIGHT (C) 1992 MIDWAY MANUFACTURING COMPANY. *
* ALL RIGHTS RESERVED. *
* *
**************************************************************************
.INCLUDE "GX.INC"
.INCLUDE "GXSTRING.H"
.INCLUDE "IMGTBL.GLO"
**************************************************************************
* *
* DEFS AND REFS *
* *
**************************************************************************
.DEF POWERTST, DIAGCPUTEST, POWERCMOS, BURNIN, CHECKDIPFREE
.DEF READ_DIP
.def read_dip
.DEF dmatest_start, dmatest_end
.IF PRINTER
.ELSE
.DEF SWITCHTEST, CONV_PLOT, DIPTEST, COLORBAR
.ENDIF
*SYMBOLS IN GX.CMD
.GLOBAL code_start, code_end, code_dest, vector_start, vector_end
.GLOBAL vector_dest
*SYMBOLS IN GXDUTL.ASM
.REF CIRCLE, HVLINE, POINT, DSCRCLR, INITCOLR, DIAG_SRT_CLR
*SYMBOLS IN GX.ASM
.REF POWERRET, PCMOSRET, EXEC_LP, CLSCRACH
.REF MAIN_INIT, INITDATA, IDATALEN
*SYMBOLS IN GXMENU.ASM
.REF ROM_NAME, CKTEST, BLASTMESS, TOP_BOX
.ref _cabinet_type
*SYMBOLS IN GXUART.ASM
.REF INITIALIZE_UART
*SYMBOLS IN GXSND.ASM
.REF SOUND_RX
.REF SEND_RAW_SOUND
.if NOPIC = 0
.ref _get_serial_number
.endif
*SYMBOLS IN GXCMOS.ASM
.REF CMOS_VAL, FAC_SET, CLR_AUD, STORE_AUDIT, KILL_AUD, GET_AUD
.REF PUT_ADJ, F_ADC_S
*SYMBOLS IN GXHSTD.ASM
.REF INIT_TB, ALL_TAB, TOD_TAB, GET_HSC, INIT_HSR
.REF VAL_TAB, CPU_RET, CLEAR_HSCOLORS
*SYMBOLS IN GXMISC.ASM
.REF COLOR_START
*SYMBOLS IN GXADJ.ASM
.REF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE
.REF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE
.REF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE
.REF SET_COIN_ADJ, GET_CSPT, DIPCOINTAB, DIPCREDTAB
.IF PRINTER
.REF OFFTIME,PBADGUY
.ENDIF
*DIAGNOSTIC SOUND EQUATES
;CMOS_ERROR_SND .EQU 5EH
;CPU_ERROR_SND .EQU 5EH
;DIP_SND .EQU 83H
;SWITCH_SND .EQU 82H
CMOS_ERROR_SND:
.WORD 0D3FFH, 100, 063d8H, 0
CPU_ERROR_SND:
.WORD 0D3FFH, 100, 063d8H, 0
DIP_SND:
.WORD 0D3FFH, 100, 063d6H, 0
SWITCH_SND:
.WORD 0D3FFH, 100, 063d6H, 0
**************************************************************************
* *
* SOME RAM FOR YOU *
* *
**************************************************************************
.BSS SWSET1,32 ; FOR SWITCH TEST
.BSS SWSET2,32
.BSS SWPREV1,32
.BSS SWPREV2,32
.BSS DIPVAL,16
.BSS DIP1ST,16
.BSS CERRORS,32
.BSS CPASSES,32
.BSS CKSUM_WORK,64
.globl _pic_secure
.bss _pic_secure,16
.bss _pic_raw,128
.bss _pic_temp,64
; .bss _pad,16
.bss _rom_type,16
.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:
.ENDM
STR_MAC .MACRO X,Y,STRING,COLOR,DIR
.WORD :X:
.WORD :Y:
.LONG :STRING:
.WORD :COLOR:
.WORD :DIR:
.ENDM
SW_MAC .MACRO X,Y,STRING,COLOR,DIR,MASK
.WORD :X:
.WORD :Y:
.LONG :STRING:
.WORD :COLOR:
.WORD :DIR:
.LONG :MASK:
.ENDM
VECMAC .MACRO COLOR,X1,Y1,X2,Y2
.WORD :COLOR:
.WORD :X1:
.WORD :Y1:
.WORD :X2:
.WORD :Y2:
.ENDM
DOTMAC .MACRO COLOR,X,Y
.WORD :COLOR:
.WORD :X:
.WORD :Y:
.ENDM
RECTMAC .MACRO COLOR,X,Y,W,H
.WORD :W:
.WORD :H:
.WORD :X:
.WORD :Y:
.WORD :COLOR:
.ENDM
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:
.ENDM
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:
.ENDM
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:
.ENDM
ROMBANK .MACRO LINK1, LINK2, LINK3, LINK4, START, END, SUM1, SUM2, SUM3, SUM4
.LONG :LINK1: ; 0
.LONG :LINK2: ; 32
.LONG :LINK3: ; 64
.LONG :LINK4: ; 96
.LONG :START: ; 128
.LONG :END: ; 160
.WORD :SUM1: ; 192
.WORD :SUM2: ; 208
.WORD :SUM3: ; 224
.WORD :SUM4: ; 240
.WORD 0,0,0,0 ; 256
.ENDM ; 320
RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE
ZERO_EXTEND EQU 1Fh ; PARAMETERS
SIGN_EXTEND EQU 20h
.sect "COLDSTRT"
.EVEN
; BIN2BCD Converts a hex number in a7 to BCD and puts it in A3
BIN2BCD:
clr a3
movi 100000,a0
_bin2bcd_loop:
sll 4,a3
move a7,a1
divu a0,a1
or a1,a3
mpyu a0,a1
sub a1,a7
move a0,a1
movk 10,a0
divu a0,a1
move a1,a0
jrnz _bin2bcd_loop
; or a7,a3
FRET b6
.if 0
BIN2BCD:
clr a3
move a7,a1
movi 100000,a0
divu a0,a1
move a1,a3
sll 4,a3
mpyu a0,a1
sub a1,a7
move a7,a1
movi 10000,a0
divu a0,a1
or a1,a3
sll 4,a3
mpyu a0,a1
sub a1,a7
move a7,a1
movi 1000,a0
divu a0,a1
or a1,a3
sll 4,a3
mpyu a0,a1
sub a1,a7
move a7,a1
movi 100,a0
divu a0,a1
or a1,a3
sll 4,a3
mpyu a0,a1
sub a1,a7
move a7,a1
movi 10,a0
divu a0,a1
or a1,a3
sll 4,a3
mpyu a0,a1
sub a1,a7
or a7,a3
FRET b6
.endif
******************************************************************************
* *
* _bcd2hex - Converts a 32 bit (8 digit) BCD Number to Hexidecimal *
* *
* ENTRY *
* A0 - BCD Number to be converted *
* B6 - Return Address *
* *
* EXIT *
* A2 - Converted Number (hex) *
* *
* USES *
* A1 - Multiplier *
* A3 - Temporary *
* A4 - Digit Counter *
* *
* Written by: Michael J. Lynch *
* *
******************************************************************************
_bcd2hex:
clr a2 ; Start with 0
movk 1,a1 ; Starting Multiplier
movk 8,a4 ; Number of BCD digits to convert
_b2h_loop: ; Main BCD to hex conversion loop
move a0,a3 ; Put BCD number in temporary register
andi 0fh,a3 ; get rid of bits not interested in
mpyu a1,a3 ; multiply by current multiplier
add a3,a2 ; Accumulate into final register
srl 4,a0 ; Shift to next BCD digit
movk 10,a3 ; Calculate next multiplier (mult = mult * 10)
mpyu a3,a1 ; New Multiplier
dsjs a4,_b2h_loop ; Keep going until 8 BCD digits are done
FRET b6 ; return
; Read PIC, decode information and stuff information into CMOS memory.
; This is the function called by security init when the correct access code
; is input. The label for this function MUST be global. The RETS at the
; end of this function returns us back to the POWERCMOS function.
.globl _read_pic_data
_read_pic_data:
setf 16,0,0
setf 32,0,1
.if NOPIC
clr a1
move a1,@_pic_secure
rets
.else
FCALL PICCHECK,b5
move a0,a0
jrnz gn_bad
setf 8,0
movk 16,a9 ; Number of bytes of data to read
movi _pic_raw,a1 ; address at which to store raw data from PIC
clr a8
move a8,@060C000E0h,1 ; Send Request Serial Number Data Command
_rp_data_loop:
movk 2,a8 ; Tell PIC command is available
setf 16,0
move a8,@060400000h,1
movi 1000000,a2 ; Wait for PIC to acknowledge
_rp_ack_loop:
move a2,a2 ; Check for command timeout
jrz gn_bad ; WOA PIC never acknowledged - ERROR!!!!
move a8,@WDOG_BONE,1
move @060400000h,a8,1
subi 1,a2
btst 1,a8 ; Data available ?
jrnz _rp_ack_loop ; NO
setf 8,0 ; YES
move @060C000E0h,a0,1 ; read data
move a0,*a1+ ; write to temp holding area
clrs a8 ; Acknowledge receipt of data
setf 16,0
move a8,@060400000h,1
movi 1000000,a2 ; Wait for PIC n acknowlegde
_rp_nack_loop:
move a2,a2
jrz gn_bad
move a8,@WDOG_BONE,1
move @060400000h,a8,1
subi 1,a2
btst 1,a8
jrz _rp_nack_loop
dsj a9,_rp_data_loop
clr a4 ; Holding Register for X
clr a5 ; Holding Register for Y
setf 8,0
movi _pic_raw,a10
addi 060h,a10
move *a10+,a4 ; Get X
move *a10,a5 ; Get Y
setf 24,0
clr a7 ; Calculate B-3-5-9
movi _pic_raw,a10
move *a10,a7
subi 15732,a7
movi 581,a0
divu a0,a7
sub a4,a7 ; B359 (binary)
FCALL BIN2BCD,b6 ; B359 (bcd) a1 = B359
setf 4,0
srl 4,a3
move a3,a0
andi 0fh,a0
movi _pic_temp,a10
addi 014h,a10
move a0,*a10 ; Stuff the 5
srl 4,a3
move a3,a0
andi 0fh,a0
movi _pic_temp,a10
addk 0ch,a10
move a0,*a10 ; Stuff the 3
movi _pic_raw,a10
addi 018h,a10
move *a10,a7,1 ; Calculate 2-A-0-8-6
subi 7463513,a7
movi 4223,a0
divu a0,a7
sub a5,a7
sub a5,a7
sub a4,a7 ; 2A086 (binary)
FCALL BIN2BCD,b6 ; 2A086 (bcd)
move a3,a0
andi 0fh,a0
movi _pic_temp,a10
addk 018h,a10
move a0,*a10 ; Stuff the 6
srl 4,a3
move a3,a0
andi 0fh,a0
movi _pic_temp,a10
addi 020h,a10
move a0,*a10 ; Stuff the 8
srl 4,a3
move a3,a0
andi 0fh,a0
movi _pic_temp,a10
move a0,*a10 ; Stuff the 0
srl 8,a3
move a3,a0
andi 0fh,a0
movi _pic_temp,a10
addk 8,a10
move a0,*a10 ; Stuff the 2
setf 24,0 ; Calcuate 1-7-4
movi 038h,a10
addi _pic_raw,a10
move *a10,a7
subi 127984,a7
movi 7117,a0
divu a0,a7
sub a5,a7
sub a5,a7
sub a5,a7
sub a5,a7
sub a5,a7 ; 174 (binary)
FCALL BIN2BCD,b6 ; 174 (bcd) a1 = 174
setf 4,0
move a3,a0
andi 0fh,a0
movi _pic_temp,a10
addk 010h,a10
move a0,*a10 ; Stuff the 4
srl 4,a3
move a3,a0
andi 0fh,a0
movi _pic_temp,a10
addk 01ch,a10
move a0,*a10 ; Stuff the 7
srl 4,a3
move a3,a0
andi 0fh,a0
movi _pic_temp,a10
addk 4,a10
move a0,*a10 ; Stuff the 1
setf 16,0
movi 050h,a10
addi _pic_raw,a10
move *a10,a0 ; This is a pointer to the date code
movi 0A047FF60h,a1 ; Pointer to where the date code is going
movk 0Ch,a2 ; Enable write to CMOS
move a2,@SYSCTRL0
move a0,*a1+,1
srl 8,a0
move a0,*a1,1
movk 08h,a2 ; Turn OFF CMOS write enable
move a2,@SYSCTRL0
setf 4,0
movi _pic_temp,a10
addk 0ch,a10
move *a10+,a0 ; Most Significant Digit (serial number)
sll 4,a0
move *a10+,a1
or a1,a0
sll 4,a0
move *a10+,a1
or a1,a0
sll 4,a0
move *a10+,a1
or a1,a0
sll 4,a0
move *a10+,a1
or a1,a0
sll 4,a0
move *a10+,a1 ; Least Significant Digit (serial number)
or a1,a0
FCALL _bcd2hex,b6 ; Convert to hex
movi 0A047FF00h,a1 ; Pointer to where the serial number is going
movk 0Ch,a3 ; Enable write to CMOS
move a3,@SYSCTRL0,1
move a2,*a1(040H),1 ; LSB of Serial Number -> CMOS
srl 8,a2
move a2,*a1(020H),1 ; Mid SB of Serial Number -> CMOS
srl 8,a2
move a2,*a1,1 ; MSB of Serial Number -> CMOS
movk 08h,a2 ; Turn OFF CMOS write enable
move a2,@SYSCTRL0,1
setf 4,0
movi _pic_temp,a10
move *a10+,a0 ; Most Significant Digit (game number)
sll 4,a0
move *a10+,a1
or a1,a0
sll 4,a0
move *a10+,a1 ; Least Significant Digit (game number)
or a1,a0
FCALL _bcd2hex,b6 ; Convert to hex
clr a1
.if DEVEL_PIC
cmpi 528,a2
.else
cmpi 419,a2
.endif
jrz gn_good
cmpi 420,a2
jrz gn_good
gn_bad:
movk 1,a1
gn_good:
setf 16,0
move a1,@_pic_secure
movi 0A047FFA0h,a1 ; Pointer to where the game number is going
movk 0Ch,a3 ; Enable write to CMOS
move a3,@SYSCTRL0,1
move a2,*a1(020H),1 ; LSB of Serial Number -> CMOS
srl 8,a2
move a2,*a1,1 ; MSB of Serial Number -> CMOS
movk 08h,a2 ; Turn OFF CMOS write enable
move a2,@SYSCTRL0,1
clr a0
setf 8,0
movi 16,a1
movi _pic_raw,a2
_stomp_temp:
move a0,*a2+
dsjs a1,_stomp_temp
movi 8,a1
movi _pic_temp,a2
_stomp_temp1:
move a0,*a2+
dsjs a1,_stomp_temp1
rets
.endif
; This really doesn't do anything yet because the random number
; generator in the FPGA doesn't work (well at least not predictably)
_unlock:
movk 3,a0
move a0,@060000000H,1
movi 000005H,a0,1
move a0,@020000000H,1
clr a0
move a0,@060000000H,1
movi 100000,a1
movi 0a9586dbah,a2
_tloop:
move a8,@WDOG_BONE,1 ; Fuck the dog
move a2,a3
move a2,a4
sll 30,a4
andi 1,a4
sll 27,a3
andi 1,a3
xor a3,a4
srl 1,a2
or a4,a2
btst 9,a2
jrz _read_real
move a2,a0
ori 0f8000000h,a0
move *a0,a3,1
jruc _read_next
_read_real:
movi 060000000h,a0
move *a0,a5,1
_read_next:
dsjs a1,_tloop ; Falls through to _unlock1 below
; Security unlock function. Gets called from POWERCMOS before the game
; is allowed to run. This function generates an address to jump to by taking
; the PSUEDO_ADDR value and xoring it with the key code (from CMOS). If the
; key code is correct the jump takes you to the _unlocked label in POWERCMOS
; and the game runs. If the key code is incorrect the jump takes the 34020
; to whatever address was generated. The key code is read from the PIC and
; put into CMOS whenever the CMOS data is initialized. The code can only be
; extracted from the PIC and put into the CMOS after the operator enters a
; software release specific access code. This must be done at the factory.
; The access code is the thing we DO NOT want released except to Williams
; personnel on a NEED TO KNOW basis.
;
; The data for the KEY BYTES will be game specific and the data for the
; PSUEDO_ADDR will be software release specific. In other words, the KEY
; BYTE data will only change from game to game but the PSUEDO_ADDR will
; change from software release to software release for that game. Generation
; of the PSUEDO_ADDR will be performed by MJL.
;
; Although the KEY BYTES will not change from software release to software
; release for a particular game the access code to allow the number to be
; extracted from the PIC and written into the CMOS will change from software
; release to software release. MJL will also be responsible for generation
; of access codes for software releases and supplying those codes to
; manufacturing.
;
; The new access codes will not be needed in the field because the KEY BYTE
; data does not change from software release to software release.
.globl _utest
_unlock1:
movi CMOS_GN,a2
move *a2+,a0,1
andi 0ffh,a0
move *a2,a1,1
andi 0ffh,a1
sll 8,a0
or a1,a0
sll 6,a0
_utest:
addi 0,a0,L ; I dare you to get rid of the ,L
.if SECURITY_LEVEL = 0
jauc _unlocked
.else
jump a0
.endif
; Security initialization function. This function is called when the CMOS
; is initialized for the first time. It's purpose is to prompt the user to
; enter a 32 bit code and then call the PIC read and decode function. If the
; user enters an incorrect access code, the processor will go off to never
; never land. This is designed to work this way in order to as much as
; possible hide the PIC read and decode function from any would be pirates.
; This code should only get called once while the board is still at GURNEE!!!
; Outside users should never be able to get to this function, but if they do
; they will need the access code for it to work right. MJL will generate and
; supply the access codes.
SECURITY_INIT:
.STRING "SECURITY SYSTEM INITIALIZATION",0
.EVEN
SECURITY_PROMPT
.STRING "ENTER ACCESS CODE",0
.EVEN
SI_INST1
.STRING "USE VOL- LEFT/VOL+ RIGHT",0
.EVEN
SI_INST2
.STRING "USE ENTER TO SELECT",0
.EVEN
SI_INST3
.STRING "USE ESCAPE TO FINISH",0
.EVEN
SI_0:
.STRING "0",0
.EVEN
SI_1:
.STRING "1",0
.EVEN
SI_2:
.STRING "2",0
.EVEN
SI_3:
.STRING "3",0
.EVEN
SI_4:
.STRING "4",0
.EVEN
SI_5:
.STRING "5",0
.EVEN
SI_6:
.STRING "6",0
.EVEN
SI_7:
.STRING "7",0
.EVEN
SI_8:
.STRING "8",0
.EVEN
SI_9:
.STRING "9",0
.EVEN
SI_A:
.STRING "A",0
.EVEN
SI_B:
.STRING "B",0
.EVEN
SI_C:
.STRING "C",0
.EVEN
SI_D:
.STRING "D",0
.EVEN
SI_E:
.STRING "E",0
.EVEN
SI_F:
.STRING "F",0
.EVEN
SI_TABLE
.LONG SI_0
.LONG SI_1
.LONG SI_2
.LONG SI_3
.LONG SI_4
.LONG SI_5
.LONG SI_6
.LONG SI_7
.LONG SI_8
.LONG SI_9
.LONG SI_A
.LONG SI_B
.LONG SI_C
.LONG SI_D
.LONG SI_E
.LONG SI_F
.EVEN
_security_init:
.if SECURITY_LEVEL < 2
jruc _read_pic_data
.else
FCALL DSCRCLR,b6
movi SECURITY_INIT,a0
FCALL STRINGCENTER,b6
clr a2
movi COLOR_RED,a3
addi [30,0],a1
FCALL STRING,b6
movi SECURITY_PROMPT,a0
FCALL STRINGCENTER,b6
clr a2
movi COLOR_YELLOW,a3
addi [50,0],a1
FCALL STRING,b6
movi SI_INST1,a0
clr a2
movi COLOR_WHITE,a3
movi [220,20],a1
FCALL STRING,b6
movi SI_INST2,a0
movi [230,20],a1
FCALL STRING,b6
movi SI_INST3,a0
movi [240,20],a1
FCALL STRING,b6
movi [180,80],a11 ; Entered code location
clr a12 ; JUMP ADDRESS
clr a8 ; HILIGHTED SELECTION
_si_loop:
clr a9 ; Temp counter
movi SI_TABLE,a10,1 ; Choices
movi [100,115],a1
clr a2
_si_loop1: ; Plot choices - hilight current
move *a10+,a0,1
cmp a8,a9
jrnz _no_hilight
movi COLOR_GREEN,a3 ; hilighted = GREEN
jruc _si_out
_no_hilight:
movi COLOR_WHITE,a3 ; Unhilighted = WHITE
_si_out:
FCALL STRING,b6
addk 1,a9
addi [0,3],a1
cmpk 16,a9
jrnz _si_loop1
movi 700000,a3
_si_button_debounce: ; Don't scan too fast!!
move a1,@WDOG_BONE,1
dsjs a3,_si_button_debounce
_si_wait_button: ; Wait for button down
move a1,@WDOG_BONE,1
move @COINS,a1,1
not a1
andi 01850h,a1
jrz _si_wait_button
_si_button_wait: ; Wait for button up
move a1,@WDOG_BONE,1
move @COINS,a2,1
not a2
andi 01850h,a2
jrnz _si_button_wait
btst 11,a1 ; Go right ?
jrnz _si_right ; YES
btst 12,a1 ; Go left ?
jrnz _si_left ; YES
btst 4,a1 ; Enter ?
jrnz _si_enter ; YES
btst 6,a1 ; Done ?
jrz _si_loop
jruc _si_done
_si_enter:
sll 4,a12 ; Make space for next
or a8,a12 ; Put in result reg
move a8,a0 ; Get pointer to value string
sll 5,a0
addi SI_TABLE,a0
move *a0,a0,1
clr a2
movi COLOR_YELLOW,a3
move a11,a1
FCALL STRING,b6
addi [0,8],a11
jruc _si_loop ; wait for next input
_si_right:
addk 1,a8
cmpk 16,a8
jrlt _si_loop
clr a8
jruc _si_loop
_si_left:
subk 1,a8
jrnn _si_loop
movk 15,a8
jruc _si_loop
_si_done:
xori 01BD953CEh,a12
jump a12 ; If Good code get PIC data - put in CMOS
.endif
;XUNIT START
FREAD_SW1_CNS:
move @SWITCH,a0
move @COINS,a14
sll 16,a14
movy a14,a0
FRET b6
FREAD_SW2_DIP:
move @SWITCH2,a10
move @DIPSWITCH,a14
sll 16,a14
movy a14,a10
FRET b6
;XUNIT END
**************************************************************************
* *
* POWERCMOS *
* *
* CHECK THE CMOS AND DO A LOT OF OTHER STUFF -- SHOW THE *
* POWER UP MESSAGES *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
; This MUST be global for security reasons
.globl _unlocked
SN_PROMPT:
.STRING "SERIAL NUMBER",0
.EVEN
PROTO_SND_VER:
.STRING "PROTO",0
.EVEN
REL_SND_VER:
.STRING "RELEASE",0
.EVEN
SND_VER_PROMPT:
.STRING "SOUND SOFTWARE VERSION",0
.EVEN
UART_TIMEOUT:
.STRING "SOUND VERSION INFORMATION FAILURE",0
.EVEN
POWERCMOS:
DINT
MOVI SYSCINIT,A1
MOVE A1,@SYSCOPY
MOVE A1,@SYSCTRL0,L ; XUNIT
srl 8,a1 ; XUNIT
move a1,@SYSCTRL1,L ; XUNIT
CLR A14
MOVE A14,@DMAGOREG,L
MOVE A14,@DMAGOREG,L
*INITIALIZE IO REGISTERS
MOVI INITDATA,B0
MOVI VESYNC,B2
MOVI IDATALEN,B7
BLMOVE 1,1 ;TRANSFER I/O REGS
movi DPYSTRT0,a14 ; XUNIT
move a14,@DPYST,L ; XUNIT
CLR A13 ; USED TO DECIDE WHETHER PAUSE OR NOT
FCALL INITCOLR,B5 ; FIX UP THE COLORS
FCALL DSCRCLR,B6 ; MAKE SURE OF SCREEN
MOVI ROM_NAME,A0
FCALL STRINGCENTER,B6 ; GET WIDTH OF STRING
ADDI [30,0],A1
CLR A2
MOVI COLOR_YELLOW,A3
FCALL STRING,B6
.if SECURITY_LEVEL < 2
.if NOPIC
.else
calla _security_init
.endif
.else
.endif
CALLA CMOS_VAL ; CHECKSUM AUDITS/ADJUSTMENTS
JREQ CMOSOK
CALLA FAC_SET ; BUMMER, BABY! RESET TO FACTORY
CALLA BLASTMESS
CALLA CLR_AUD
MOVI ALL_TAB,A8 ; ALWAYS CLEAR OUT TODAYS TABLE
CALLA INIT_TB
MOVI TOD_TAB,A8
CALLA INIT_TB
CALLA INIT_HSR ; RE-SET THE HIGH SCORE RESET COUNTER
.if SECURITY_LEVEL > 1
calla _security_init
.endif
MOVK 1,A13 ; FLAG ERROR
CALLA CMOS_VAL ; TRY AGAIN
JREQ CMOSB1
MOVI CMOS_BAD,A0
FCALL STRINGCENTER,B6
ADDI [50,0],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
MOVI CMOS_UNFAC,A0
FCALL STRINGCENTER,B6
ADDI [65,0],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
JRUC CMOS1
CMOSB1
MOVI CMOS_FACRES,A0
FCALL STRINGCENTER,B6
ADDI [50,0],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
JRUC CMOS1
CMOSOK
MOVI CMOS_OK,A0
FCALL STRINGCENTER,B6
ADDI [50,0],A1
CLR A2
MOVI COLOR_GREEN,A3
FCALL STRING,B6
CMOS1
; Security
; Jump to the unlock function - if security checks out a jump to _unlocked
; is performed.
movi SECURITY_CHECK,A0
FCALL STRINGCENTER,b6
addi [70,0],a1
clr a2
movi COLOR_YELLOW,a3
FCALL STRING,b6
.if NOPIC = 0
.if SECURITY_LEVEL > 0
setf 16,0
move @_pic_secure,a2
jrz _pic_scheck_ok
movi SECURITY_LEVEL_0_FAIL,a0
FCALL STRINGCENTER,b6
addi [128,0],a1
clr a2
movi COLOR_RED,a3
FCALL STRING,b6
_pic_scheck_bad:
move a8,@WDOG_BONE,1
jruc _pic_scheck_bad
_pic_scheck_ok:
movi SN_PROMPT,a0
FCALL STRINGCENTER,b6
addi [128,0],a1
clr a2
movi COLOR_PURPLE,a3
FCALL STRING,b6
calla _get_serial_number
move a2,a7
FCALL BIN2BCD,b6
sll 8,a3
movk 6,a4
movi _pic_temp,a1
setf 8,0
_sn_loop:
move a3,a2
andi 0f0000000h,a2
srl 28,a2
ori 030h,a2
move a2,*a1+
sll 4,a3
dsjs a4,_sn_loop
clr a2
move a2,*a1
movi _pic_temp,a0
FCALL STRINGCENTER,b6
addi [140,0],a1
clr a2
movi COLOR_GREEN,a3
FCALL STRING,b6
.else
setf 16,0
clr a2
move a2,@_pic_secure
.endif
.endif
calla INITIALIZE_UART
clr a2
move a2,@(UART+UART_IMR),1
movi 10000,a2
_delay_loop:
movb a2,@WDOG_BONE
dsjs a2,_delay_loop
rx_data_dump_loop:
move @(UART+UART_CSR),a2,1
btst 0,a2
jrz rx_empty
movb a2,@WDOG_BONE
move @(UART+UART_THR),a2,1
movi 10000,a2
_rx_wait_shit:
movb a2,@WDOG_BONE
dsjs a2,_rx_wait_shit
jruc rx_data_dump_loop
rx_empty:
movi 100000,a2
tx_wait1:
move @(UART+UART_CSR),a3
btst 2,a3
jrnz tx_rdy
movb a2,@WDOG_BONE
dsjs a2,tx_wait1
jruc uart_timeout
tx_rdy:
movk 3,a2
move a2,@(UART+UART_THR),1
movi 100000,a2
tx_wait2:
move @(UART+UART_CSR),a3
btst 2,a3
jrnz tx_rdy1
movb a2,@WDOG_BONE
dsjs a2,tx_wait2
jruc uart_timeout
tx_rdy1:
movi 0e7h,a2
move a2,@(UART+UART_THR),1
movi 1000000,a2
_rx_wait:
move @(UART+UART_CSR),a3,1
btst 0,a3
jrnz rx_rdy
movb a2,@WDOG_BONE
dsjs a2,_rx_wait
jruc uart_timeout
rx_rdy:
move @(UART+UART_THR),a2,1
andi 0ffh,a2
move a2,@_pic_temp
movi SND_VER_PROMPT,a0
FCALL STRINGCENTER,b6
addi [160,0],a1
clr a2
movi COLOR_PURPLE,a3
FCALL STRING,b6
move @_pic_temp,a0
srl 4,a0
andi 0fh,a0
cmpk 0dh,a0
jrnz _rel_version
movi PROTO_SND_VER,a0
jruc _snd_version
_rel_version:
movi REL_SND_VER,a0
_snd_version:
FCALL STRINGCENTER,b6
addi [170,-8],a1
clr a2
movi COLOR_PURPLE,a3
FCALL STRING,B6
move a1,@CKSUM_WORK,1 ; Save Position
movi SND_VER_PROMPT,a0
FCALL STRINGCENTER,b6
addi [160,0],a1
clr a2
movi COLOR_YELLOW,a3
FCALL STRING,B6
move @_pic_temp,a7
andi 0fh,a7
FCALL BIN2BCD,b6
sll 24,a3
move a3,a4
andi 0f0h,a4
jrnz two_nums
sll 4,a3
movk 1,a4
jruc do_snd_sn
two_nums:
movk 2,a4
do_snd_sn:
movi _pic_temp,a1
setf 8,0
_snd_sn_loop:
move a3,a2
andi 0f0000000h,a2
srl 28,a2
ori 030h,a2
move a2,*a1+
sll 4,a3
dsjs a4,_snd_sn_loop
clr a2
move a2,*a1
movi _pic_temp,a0
move @CKSUM_WORK,a1,1
addi [0,8],a1
clr a2
movi COLOR_PURPLE,a3
FCALL STRING,b6
jruc _snd_done
uart_timeout:
movi UART_TIMEOUT,a0
FCALL STRINGCENTER,b6
addi [160,0],a1
clr a2
movi COLOR_RED,a3
FCALL STRING,B6
_snd_done:
movi 1000000,a3
_sc_loop:
move a8,@WDOG_BONE,1
dsjs a3,_sc_loop
.if SECURITY_LEVEL > 1
jauc _unlock
.endif
_unlocked:
MOVI AUDONTIME,A0
.IF PRINTER
CALLA GET_AUD
MOVE A1,@OFFTIME,L ; SAVE THE LAST POWER TIME STUFF
.ENDIF
CLR A1
CALLA STORE_AUDIT
MOVI TOD_TAB,A8
CALLA INIT_TB ; LATER, ON TODAY'S TABLE
MOVI TOD_TAB,A8 ; OK, VALIDATE IT
CLR A2 ; FOR RECURSION
CALLA VAL_TAB
JRNC CTAGO
MOVK 1,A13 ; FLAG ERROR
MOVI CMOS_TBAD,A0
FCALL STRINGCENTER,B6
ADDI [77,0],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
CTAGO
MOVI ALL_TAB,A8
CALLA VAL_TAB ; VALIDATE THE ALLTIME TABLE
JRNC CTA1
MOVK 1,A13 ; FLAG ERROR
MOVI CMOS_ABAD,A0
FCALL STRINGCENTER,B6
ADDI [89,0],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
JRUC CMOS2
CTA1
CALLA CLEAR_HSCOLORS ; WIPE OUT ALL THE COLORATION
MOVE A2,A2
JRNZ CTA2 ; IT GOT INITIALIZED
CALLA GET_HSC ; GET HIGHSCORE COUNTER
JRNZ CMOS2 ; BR = NOT TIME YET
MOVI ADJHSRES,A0 ; GET ADJUSTED VALUE
CALLA GET_ADJ
JRZ CMOS2 ; TURNED OFF, NOTHING TO DO
MOVI ALL_TAB,A8
CALLA INIT_TB ; LATER ON ALLTIME TABLE
CTA2
MOVI CMOS_ALL,A0
FCALL STRINGCENTER,B6
ADDI [90,0],A1
CLR A2
MOVI COLOR_GREEN,A3
FCALL STRING,B6
CALLA INIT_HSR ; RESET THE HIGHSCORE COUNTER
;
; BY HERE, THE CMOS SHOULD BE FIXED UP AS GOOD AS POSSIBLE -- NOTE
; THAT IF CMOS IS BUSTED, THE GUY IS FUCKED FOR COINAGE
;
; WITH SOME THOUGHT THAT MIGHT BE FIXABLE
;
CMOS2
CALLR read_dip
ANDI DPUSECMOS,A0
JRNZ CMOS3 ; BR = USING CMOS COINAGE
*LOAD COINAGE FROM DIPSWITCH
MOVI CMOS_DIP,A0
FCALL STRINGCENTER,B6
ADDI [110,0],A1
CLR A2
MOVI COLOR_WHITE,A3
FCALL STRING,B6
CALLR read_dip
MOVE A0,A2
ANDI DPCOUNTRY,A0
SRL 3,A0
ADDI DIPCOINTAB,A0
MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE
ANDI DPCOINAGE,A2
CMPI DPCOINAGE,A2 ; CHECK FOR FREEPLAY
JRZ CMOS21
SLL 2,A2
ADD A2,A1
MOVE *A1,A1,W ; WHICH COIN TABLE TO USE
MOVI ADJPRICE,A0 ; MASTER PRICING
CALLA PUT_ADJ ; STUFF IT IN CMOS
MOVI ADJFREPL,A0
CLR A1 ; MAKE SURE NO FREEPLAY
CALLA PUT_ADJ
CMOS20
MOVI ADJ1ST6,A0 ;MAKE THEM UNTOUCHED PLEASE
MOVK 1,A1
CALLA PUT_ADJ
CALLA GET_CSPT
CALLA SET_COIN_ADJ ; SET THE ADJUSTMENTS UP IN CMOS
CALLR read_dip ;SET UP CREDITS TO START/CONTINUE
MOVE A0,A2
ANDI DPCREDITS,A2
SRL 1,A2
ADDI DIPCREDTAB,A2
MOVB *A2,A1
ADDK 8,A2
MOVI ADJCSTRT,A0
CALLA PUT_ADJ
MOVB *A2,A1
MOVI ADJCCONT,A0
CALLA PUT_ADJ
CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS
JRUC CMOS4
CMOS21
MOVI ADJFREPL,A0
MOVK 1,A1 ; FREEPLAY, DUDE!
CALLA PUT_ADJ
JRUC CMOS20
CMOS3
;
; USING CMOS HERE
;
MOVI CMOS_CMOS,A0
FCALL STRINGCENTER,B6
ADDI [110,0],A1
CLR A2
MOVI COLOR_WHITE,A3
FCALL STRING,B6
CMOS4
; CALLR PLOTCOINAGE ; PLOT SOME COINAGE
FCALL FREAD_SW1_CNS,B6 ; READ SWITCH & COINS
NOT A0
ANDI 00080000H,A0
JRZ CMOSRET
MOVI CMOS_TILT,A0
FCALL STRINGCENTER,B6
ADDI [205,0],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
MOVK 1,A13 ; FLAG ERROR
CMOSRET
MOVE A13,A13
JRZ CTMP0
MOVI CMOS_ERROR_SND,A0
; MOVE A0,@SOUND,W
MOVI CMOS_WAIT,A0
FCALL STRINGCENTER,B6
ADDI [230,0],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
FCALL FREAD_SW1_CNS,B6 ;XUNIT HANGOUT FOR A WHILE
ANDI 00243030H,A0
MOVE A0,@SWSET1,L
CTMP1
FCALL FREAD_SW1_CNS,B6 ; XUNIT GOTTA SEE IF TIME TO LEAVE
MOVE @SWSET1,A1,L
ANDI 00243030H,A0
CMP A0,A1
move a0,@WDOG_BONE,1
JREQ CTMP1
JRUC CTMP2
CTMP0
movi 280000H,a3
PC_END_WAIT ;Keep the dog away
move a1,@WDOG_BONE,1
dsjs a3,PC_END_WAIT ;Give time to read screen
; PAUSE 200000H,B6
CTMP2
JAUC PCMOSRET
.IF GERMAN
CMOS_FACRES
.STRING "CMOS FEHLER -- FABRIKDATENEINSTELLUNG",0
.EVEN
CMOS_WAIT
.STRING "SPIELFORTSETZUNG MIT BELIEBIGEM KNOPF",0
.EVEN
CMOS_BAD
.STRING "CMOS RAM U15 FEHLER",0
.EVEN
.ELSE
CMOS_FACRES
.STRING "CMOS INVALID -- FACTORY SETTINGS RESTORED",0
.EVEN
CMOS_WAIT
.STRING "ERRORS DETECTED -- ANY BUTTON TO CONTINUE",0
.EVEN
CMOS_BAD
.STRING "CMOS CHIP U15 BAD",0
.EVEN
.ENDIF
CMOS_TILT
.STRING "WARNING -- SLAM SWITCH CLOSED",0
.EVEN
CMOS_DIP
.STRING "USING DIPSWITCH COINAGE",0
.EVEN
CMOS_CMOS
.STRING "USING CMOS COINAGE",0
.EVEN
CMOS_UNFAC
.STRING "UNABLE TO RESTORE FACTORY SETTINGS",0
.EVEN
CMOS_OK
.STRING "CMOS OK",0
.EVEN
CMOS_ALL
.STRING "ALL TIME HIGH SCORES RESET",0
.EVEN
CMOS_ABAD
.STRING "UNABLE TO RESET ALLTIME HIGHSCORE TABLE",0
.EVEN
CMOS_TBAD
.STRING "UNABLE TO RESET DAILY HIGHSCORE TABLE",0
.EVEN
; security check message
SECURITY_CHECK
.if SECURITY_LEVEL = 0
.STRING "UNSECURED SYSTEM",0
.else
.mmsg "SEC LEVEL 1"
.STRING "SECURITY CHECK",0
.endif
.EVEN
**************************************************************************
* *
* PLOTCOINAGE *
* *
* PLOT OUT THE CURRENT COINAGE ON THE SCREEN *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
****PLOTCOINAGE:
**** .IF PRINTER
**** RETS
**** .ELSE
**** MOVI ADJFREPL,A0
**** CALLA GET_ADJ
**** JRNZ PCFREE
****PC1
**** MOVI ADJPRICE,A0
**** CALLA GET_ADJ ; GET THE CURRENT PRICING
**** CALLA GET_CSPT
**** MOVE *A6(CS_LIST),A7,L
**** JRZ PCNOHEAD ; NO HEADER, BELIEVE IT OR NOT
**** MOVI [130,0],A8 ; BASE ADDRESS FOR STRING
****PCNEXTHEAD
**** MOVE *A7+,A0,L ; PICKUP THE NEXT POINTER
**** JRZ PCNOHEAD
****
**** FCALL STRINGCENTER,B6
**** ADD A8,A1
**** CLR A2
**** MOVI COLOR_YELLOW,A3
**** FCALL STRING,B6
**** ADDI [12,0],A8 ; MOVE DOWN A LINE
****
**** JRUC PCNEXTHEAD
**** JRUC PCNOHEAD
****PCFREE
**** MOVI DUCOIN7,A0
**** FCALL STRINGCENTER,B6
**** ADDI [130,0],A1
**** CLR A2
**** MOVI COLOR_YELLOW,A3
**** FCALL STRING,B6
****PCNOHEAD
**** RETS
**** .ENDIF
**************************************************************************
* *
* *
* CPU TESTING ROUTINES *
* *
* *
**************************************************************************
**************************************************************************
* *
* BURNIN *
* *
* FACTORY BURNIN TEST -- EXITS BY RESETING THE GAME *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* NOTHING *
* *
* CALL *
* JAUC *
* *
**************************************************************************
BURNIN:
DINT
MOVI AUDAUTO,A0 ;ZERO OUT BURNIN AUDIT
CALLA KILL_AUD
BURNLOOP
MOVI SYSC_COLD,A0 ;Grab cold start values
MOVE A0,@SYSCTRL0,L
srl 8,a0
MOVE A0,@SYSCTRL1,L
FCALL CPUTEST,SP
MOVI SYSC_COLD,A0 ;Grab cold start values
MOVE A0,@SYSCTRL0,L
srl 8,a0
MOVE A0,@SYSCTRL1,L
; At this point all of the DRAM is trashed - SOOOOO reload the vector
; table and code
MOVI vector_start,B0
MOVI vector_dest,B2
MOVI vector_end,B7
SUB B0,B7
BLMOVE 1,1 ;TRANSFER VECTORS
MOVI code_start,B0
MOVI code_dest,B2
MOVI code_end,B7
SUB B0,B7
BLMOVE 1,1 ;TRANSFER CODE, ZZZZZZ
BURNSP:
SETF 16,1,0
SETF 32,1,1
MOVI STCKST,SP,L ;RESTORE THE STACK PTR
MOVI AUDAUTO,A0
CALLA AUD1 ;ANOTHER ONE WORKED
JRUC BURNLOOP
**************************************************************************
* *
* DIAGCPUTEST *
* *
* DIAGNOSTIC CALL FOR THE CPU TEST *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* JUMPS TO *EXEC_LP* AFTER SETTING EVERYTHING UP *
* *
* CALL *
* JAUC *
* *
**************************************************************************
DIAGCPUTEST:
DINT
MOVI SYSCINIT&(~WRPROTHI),A0
MOVB A0,@SYSCOPY
MOVE A0,@SYSCTRL0,L ; XUNIT
FCALL CPUTEST,SP
; At this point all of the DRAM is trashed - SOOOOO reload the vector
; table and code
MOVE A1,@WDOG_BONE,L
MOVI vector_start,B0
MOVI vector_dest,B2
MOVI vector_end,B7
SUB B0,B7
BLMOVE 1,1 ;TRANSFER VECTORS
MOVI code_start,B0
MOVI code_dest,B2
MOVI code_end,B7
SUB B0,B7
BLMOVE 1,1 ;TRANSFER CODE, ZZZZZZ
MOVE A1,@WDOG_BONE,L
DIAGSP:
jauc _backtogame
; XUNIT NEED TO RUN THE FOLLOWING CODE OUT OF RAM IN CASE AN
; INTERRUPT OCCURS BEFORE WE JUMP BACK TO EXEC_LP
.text
_backtogame:
SETF 16,1,0 ; WORD NO SIGN EXTEND
SETF 32,1,1 ; LONG WORD
MOVI STCKST,SP,L
CALLA CLSCRACH
MOVI SYSCINIT,A0
MOVE A0,@SYSCOPY,W
MOVE A0,@SYSCTRL0,L ; XUNIT
srl 8,a0 ; XUNIT
MOVE A0,@SYSCTRL1,L ; XUNIT
CALLA MAIN_INIT
CALLA COLOR_START ;FIRE UP THE COLORS
EINT ; ENABLE INTERRUPTS AND WE'RE OFF
DISPON ; ENABLE THE DISPLAY SYSTEM
CREATE PID_DIAG,CPU_RET
MOVI INDIAG,A0
MOVE A0,@GAME_STATE,W
JAUC EXEC_LP
.sect "COLDSTRT"
**************************************************************************
* *
* POWERCPUTEST *
* *
* CHECK OUT THE CPU ON POWER ON *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* JUMPS TO *PONTEST* *
* *
* CALL *
* JAUC *
* *
**************************************************************************
POWERCPUTEST:
DINT
;NO DIPSWITCHES AVAILABLE FOR THIS
; MOVE @DIPSWITCH,A0,L ; CHECK FOR POWER ON BYPASS
; NOT A0
; ANDI 0400H,A0
; JANZ PONTEST
FCALL CPUTEST,SP
JAUC PONTEST
**************************************************************************
* *
* CPUTEST *
* *
* THE ACTUAL CPU TEST STUFF *
* *
* ENTRY *
* SP RETURN ADDRESS *
* *
* EXIT *
* WHO KNOWS *
* *
* CALL *
* FCALL CPUTEST,SP *
* *
**************************************************************************
CPUT_X .EQU 25 ;TEXT X POSITION
;CPUT_Y1 .EQU 128 ;TEXT ROW 1 Y POSITION
;CPUT_Y2 .EQU 140 ;TEXT ROW 2 Y POSITION
;CPUT_Y3 .EQU 152 ;TEXT ROW 3 Y POSITION
CPUT_Y1 .EQU 64 ;TEXT ROW 1 Y POSITION
CPUT_Y2 .EQU 76 ;TEXT ROW 2 Y POSITION
CPUT_Y3 .EQU 88 ;TEXT ROW 3 Y POSITION
CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START
CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+15,200-CPUT_X]
CPUTEST:
MOVB A0,@WDOG_BONE ;HERE DOGGY DOGGY
FCALL INITCOLR,B5 ;HEY! IT LOOKS BETTER THIS WAY
FCALL DSCRCLR,B6 ;BLOW THE SCREEN OR IT LOOKS TOO UGLY
CLR B0
MOVI VRAMCHIPS,A14 ;VERIFY BIT MAP
FCALL RAMCHECK,B5
; ENABLE VIDEO PALETTE MAP ACCESS
MOVI PALCHIPS,A14 ;VERIFY OBJECT PALETTE RAM
FCALL RAMCHECK,B5
MOVE B0,A12
; DISABLE VIDEO PALETTE MAP ACCESS
FCALL INITCOLR,B5 ;RELOAD THE COLORS
FCALL DSCRCLR,B6
FCALL CPUDRAW,B5 ;SHOW THE CPU
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 PSRAMCK
PBADRAM
MOVI RAMBADMESS,A0
MOVI [CPUT_Y1,CPUT_X],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
JRUC PCPUBAD
PSRAMCK
MOVI SRAMCHECK,A0
MOVI [CPUT_Y1,CPUT_X],A1
CLR A2
MOVI COLOR_YELLOW,A3
FCALL STRING,B6
CLR B0
MOVI SRAMCHIPS,A14 ;VERIFY SCRATCH RAMS
FCALL RAMCHECK,B5
MOVE B0,A12
MOVI CPUT_CLR,A0
MOVI CPUT_CLRS,A1
MOVI COLOR_BLACK,A2
FCALL RECTANGLE,B6
MOVE A12,A12
JRNZ PBADRAM
PROMCK
MOVI ROMCMESS,A0
MOVI [CPUT_Y1,CPUT_X],A1
CLR A2
MOVI COLOR_YELLOW,A3
FCALL STRING,B6
MOVI CPUEXIT1_MESS,A0
MOVI [CPUT_Y2,CPUT_X],A1
CLR A2
MOVI COLOR_YELLOW,A3
FCALL STRING,B6
MOVI CPUEXIT2_MESS,A0
MOVI [CPUT_Y3,CPUT_X],A1
CLR A2
MOVI COLOR_YELLOW,A3
FCALL STRING,B6
CLR B0 ;KEEP THE STATS HERE
movk 1,a0
move a0,@_rom_type,W
movi PROMBANKS,a0
fcall _rom_sums,b5
; TEST PURPOSES ONLY - Put back when Prog ROM checksums stabalize
JRNZ PROMABORT
clr a0
move a0,@_rom_type,W
movi IROMBANKS,a0
fcall _rom_sums,b5
; TEST PURPOSES ONLY - Take out when Prog ROM checksums stabalize
; jruc PDMACK
JRZ PDMACK
PROMABORT
MOVE B0,A12
MOVI CPUT_CLR,A0
MOVI CPUT_CLRS,A1
MOVI COLOR_BLACK,A2
FCALL RECTANGLE,B6
MOVE A12,A12
JRNZ PBADROM
*WE CHECK ON THE DMA HERE
PDMACK
; Before we can check the DMA we have to copy the DMA test from
; its load address to it's run address. This is because when the DMA
; is active we loose access to ROM.
movi DMACHECK,a0 ; run address of dma test
movi dmatest_start,a1 ; load address of dma test
movi dmatest_end,a2 ; calculate amount to move
sub a1,a2
srl 3,a2 ; move it in bytes
setf 8,0
_dmatm_loop:
move *a1+,*a0+,0
dsjs a2,_dmatm_loop
MOVI DMACMESS,A0
MOVI [CPUT_Y1,CPUT_X],A1
CLR A2
MOVI COLOR_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 CPUT_CLR,A0
MOVI CPUT_CLRS,A1
MOVI COLOR_BLACK,A2
FCALL RECTANGLE,B6
MOVE A12,A12
JRNZ PBADDMA
PUARTCK
MOVI UARTMESS,A0
MOVI [CPUT_Y1,CPUT_X],A1
CLR A2
MOVI COLOR_YELLOW,A3
FCALL STRING,B6
FCALL UARTCHECK,B5
MOVI UART_CHIP,A10
MOVE A0,A11
MOVE A0,A12
INC A11
FCALL CHIPOUT,B5
MOVI CPUT_CLR,A0
MOVI CPUT_CLRS,A1
MOVI COLOR_BLACK,A2
FCALL RECTANGLE,B6
MOVE A12,A12
JRNZ PBADUART
PPICCK
MOVI PICMESS,A0
MOVI [CPUT_Y1,CPUT_X],A1
CLR A2
MOVI COLOR_YELLOW,A3
FCALL STRING,B6
.if NOPIC
CLR A0
.else
FCALL PICCHECK,B5
.endif
MOVI PIC,A10
MOVE A0,A11
MOVE A0,A12
INC A11
FCALL CHIPOUT,B5
MOVI CPUT_CLR,A0
MOVI CPUT_CLRS,A1
MOVI COLOR_BLACK,A2
FCALL RECTANGLE,B6
MOVE A12,A12
JRZ PCPUGOOD
PBADPIC
MOVI PICBADMESS,A0
MOVI [CPUT_Y1,CPUT_X],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
_bad_pic_loop:
move a0,@WDOG_BONE,1
jruc _bad_pic_loop
PBADUART
MOVI UARTBADMESS,A0
MOVI [CPUT_Y1,CPUT_X],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
JRUC PCPUBAD
PBADDMA
MOVI DMABADMESS,A0
MOVI [CPUT_Y1,CPUT_X],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
JRUC PCPUBAD
PBADROM
MOVI CPUT_CLR,A0
MOVI CPUT_CLRS,A1
MOVI COLOR_BLACK,A2
FCALL RECTANGLE,B6
MOVI ROMBADMESS,A0
MOVI [CPUT_Y1,CPUT_X],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
PCPUBAD
MOVI CPUPAUSE,A0
MOVI [CPUT_Y2,CPUT_X],A1
CLR A2
MOVI COLOR_RED,A3
FCALL STRING,B6
PCPUWAIT
MOVB B14,@WDOG_BONE
MOVI CPU_ERROR_SND,A0
; MOVE A0,@SOUND,W
MOVE A13,B5
PAUSE 10000,B6
FCALL FREAD_SW1_CNS,B6 ; XUNIT
ANDI 00243030H,A0
MOVE A0,@SWSET1,L
MOVI -1,B0 ; ASSUME DON'T TIMEOUT
CMPI DIAGSP,SP
JRZ PCPUTMP1
CMPI BURNSP,SP
JRZ PCPUTMP1
MOVI 200000H,B0
PCPUTMP1
MOVB B14,@WDOG_BONE
MOVE B0,B0
JRN PCPUNOTIMEOUT
DEC B0
JRZ PCPURET ; TIMEOUT HERE
PCPUNOTIMEOUT
FCALL FREAD_SW1_CNS,B6 ; XUNIT GOTTA SEE IF TIME TO LEAVE
MOVE @SWSET1,A1,L
ANDI 00243030H,A0
CMP A0,A1
JRNZ PCPURET
JRUC PCPUTMP1
PCPUGOOD
CLR A0
JRUC PCPUREALRET
PCPURET
MOVK 1,A0
PCPUREALRET
MOVE A0,A0
FRET SP
.IF GERMAN
; UART & PIC Messages
UARTMESS
.STRING "U7 PRUEFEN",0
.EVEN
UARTBADMESS
.STRING "U7 DEFEKT",0
.EVEN
PICMESS
.STRING "U444 PRUEFEN",0
.EVEN
PICBADMESS
.STRING "U444 DEFEKT",0
.EVEN
DMACMESS
.STRING "U76 PRUEFEN",0
.EVEN
DMABADMESS
.STRING "U76 DEFEKT",0
.EVEN
ROMCMESS
.STRING "ROMS PRUEFEN",0
.EVEN
ROMBADMESS
.STRING "ROM DEFEKT",0
.EVEN
RAMBADMESS
.STRING "RAM DEFEKT",0
.EVEN
CPUGOOD
.STRING "CPU-PLATINE OK",0
.EVEN
CPUWAIT1
CPUPAUSE
.STRING "BELIEBIGEN KNOPF DRUECKEN",0
.EVEN
CPUEXIT1_MESS
.STRING "HALTE START",0
.EVEN
CPUEXIT2_MESS
.STRING "ZUM VERLASSEN.",0
.EVEN
.ELSE
; UART & PIC Messages
UARTMESS
.STRING "CHECKING UART",0
.EVEN
UARTBADMESS
.STRING "UART FAILURE",0
.EVEN
PICMESS
.STRING "CHECKING CUSTOM U444",0
.EVEN
PICBADMESS
.STRING "CUSTOM CHIP U444 BAD",0
.EVEN
DMACMESS
.STRING "CHECKING CUSTOM",0
.EVEN
DMABADMESS
.STRING "CUSTOM CHIP U76 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
CPUEXIT1_MESS
.STRING "ESCAPE OR START",0
.EVEN
CPUEXIT2_MESS
.STRING "TO EXIT.",0
.EVEN
.ENDIF
**************************************************************************
* *
* 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
MOVI BOARDSTRING,A0
MOVI [227,17],A1
CLR A2
MOVI COLOR_WHITE,A3
FCALL STRING,B6
MOVI BOARDSTRING2,A0
MOVI [239,19],A1
FCALL STRING,B6
MOVE A13,B5
FRET B5
BOARDSTRING
.STRING "A-16744-40019",0
.EVEN
BOARDSTRING2
.STRING "REVOLUTION X",0
.EVEN
**************************************************************************
* *
* 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 COLOR_WHITE,A2
FCALL HVLINE,B6
MOVE A6,A0
MOVE A7,A1
ADDI [1,0],A1
MOVI COLOR_WHITE,A2
FCALL HVLINE,B6
MOVE A8,A0
MOVE A7,A1
MOVI COLOR_WHITE,A2
FCALL HVLINE,B6
MOVE A5,A0
MOVE A8,A1
MOVI COLOR_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 ;XUNIT GET ME A COLOR
FCALL RECTANGLE,B6
CONOFILL
MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION
MOVE A5,A0
ADDXY A1,A0
MOVI COLOR_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 COLOR_BLACK,A3
MOVI 020H,A5
MOVE A5,@0C0000190H,0 ; TURN ON TRANSPARENCY
MOVE A11,A11 ; CHECK FOR COLOR
JRNZ COBLACK
CLR A5
MOVE A5,@0C0000190H,0 ; TURN ON TRANSPARENCY
MOVI COLOR_WHITE,A3
COBLACK
FCALL STRING,B6
FRET B5
CHIPCOLORS:
.WORD COLOR_BLACK
.WORD COLOR_GREEN
.WORD COLOR_RED
.WORD COLOR_GREY
.WORD COLOR_PURPLE
**************************************************************************
* *
* DMACHECK *
* *
* CHECK THE DMA OUT *
* *
* ENTRY *
* B5 RETURN ADDRESS *
* *
* EXIT *
* A0 DMA STATUS *
* 0 = GOOD *
* 1 = BAD *
* *
**************************************************************************
.text
.label dmatest_start
DMACHECK ; rewritten for XUNIT
MOVB B14,@WDOG_BONE
CLR A14
MOVE A14,@DMAGOREG,L
MOVE A14,@DMAGOREG,L
movi SYSC_COLD,a14
ori 1,a14
move a14,@SYSCTRL1,L
MOVi DMACF4,A14 ; XUNIT
MOVE A14,@DMACONFIG,L ;ADJUST WINDOW RIGHT/LEFT BORDER
MOVI [511,0],A14
MOVE A14,@DMAWINDOW,L ;OPEN LEFT TO RIGHT
MOVI DMAWIN|DMACF4,A14
MOVE A14,@DMACONFIG,W ;ADJUST WINDOW RIGHT/LEFT BORDER
MOVI [511,0],A14
MOVE A14,@DMAWINDOW,L ;FULL HEIGHT WINDOW
MOVI [100H,100H],A14
MOVE A14,@DMAXYSCL,L
MOVI [1,448],A14 ;BLOW OUT TRADEMARK
MOVE A14,@DMAHVSIZE,L
MOVI IROM,A14 ;DMA LOGO LOCATION
MOVE A14,@DMASAG,L
MOVI [257,0],A14
MOVE A14,@DMAHV,L ;OFFSCREEN PLOT
MOVI 0505H,A14
MOVE A14,@DMACMAPCON,L ; CONST = 0, CMAP = 505h
MOVI [8003H,0],A14 ;USE IMAGE ROM - WRITE ALWAYS
MOVE A14,@DMAOFFCTL,L ;KICK OFF THE DMA
MOVI 7FFFH,A14 ;LOAD TIMEOUT COUNTER
DMACWAIT
MOVE B14,@WDOG_BONE
MOVE @DMAGOREG,A0,L ;DMA BUSY?
JRNN DMADONE ;BR = NO, TIME TO CHECK
DSJS A14,DMACWAIT
JRUC DMACBAD ;DMA TIMED OUT
DMADONE
CLR A0 ;GET BACK TO A REAL PALETTE
MOVE A0,@DMACMAPCON,L
MOVI 0101000H,A0 ;LINEAR SCREEN LOCATION OF DATA
MOVI IROM,A1 ;DMA LOGO LOCATION
MOVI 448,A2 ;NUMBER OF BYTES TO COMPARE
DMACLOOP
MOVB *A0,A3 ;DESTINATION BYTE
MOVB *A1,A4 ;SOURCE BYTE
ADDK 8,A0
ADDK 8,A1
CMP A3,A4
JRNZ DMACBAD ;BR = DATA ERROR
DSJS A2,DMACLOOP
*
*CHECK DATA IN OBJECT PALETTE
*
MOVI 0901000H,A0 ;LOCATION
MOVI 224,A2 ;NUMBER OF WORDS TO COMPARE
DMACLOOP2
MOVE *A0+,A3,W
CMPI 0505H,A3
JRNZ DMACBAD
DSJS A2,DMACLOOP2
CLR A0
JRUC DMACRET
DMACBAD
CLR A0 ;GET BACK TO A REAL PALETTE
CLR A14
MOVE A14,@DMAGOREG,L
MOVE A14,@DMAGOREG,L
MOVE A0,@DMAOFFCTL,L
MOVE A0,@DMACMAPCON,L
MOVK 1,A0
DMACRET
CLR A14
MOVE A14,@DMAGOREG,L
MOVE A14,@DMAGOREG,L
movi SYSC_COLD,a14
ori 1,a14
move a14,@SYSCTRL1,L
MOVE A0,A0
FRET B5
.label dmatest_end
.sect "COLDSTRT"
**************************************************************************
* *
* PICCHECK *
* *
* Checks to see if the PIC exists and is accessible *
* *
* ENTRY *
* B5 RETURN ADDRESS *
* *
* EXIT *
* A0 PIC STATUS *
* 0 = GOOD *
* 1 = BAD *
* *
**************************************************************************
.if NOPIC
.else
PICCHECK
setf 8,0
movk 0fh,a8
movb a8,@060C000E0h
movk 2,a8
setf 16,0
move a8,@060400000h
movi 100000,a9
_pic_loop1:
move a9,a9
jrz _pic_error
move a8,@WDOG_BONE,1
move @060400000h,a8
subi 1,a9
btst 1,a8
jrnz _pic_loop1
setf 8,0
move @060C000E0h,a9
clrs a8
setf 16,0
move a8,@060400000h
movi 100000,a0
_pic_loop2:
move a0,a0
jrz _pic_error
move a8,@WDOG_BONE,1
move @060400000h,a8
subi 1,a0
btst 1,a8
jrz _pic_loop2
cmpk 0fh,a9
jrnz _pic_error
clr a0
jruc _pic_done
_pic_error:
movk 1,a0
_pic_done:
FRET b5
.endif
**************************************************************************
* *
* UARTCHECK *
* *
* Checks to see if the UART is accessible and working *
* *
* ENTRY *
* B5 RETURN ADDRESS *
* *
* EXIT *
* A0 UART STATUS *
* 0 = GOOD *
* 1 = BAD *
* *
**************************************************************************
UARTCHECK
_uart_data_test:
MOVK 26,A8
MOVE A8,@080c00040h,1
MOVI 48,A8
MOVE A8,@080c00040h,1
MOVK 32,A8
MOVE A8,@080c00040h,1
MOVK 19,A8
MOVE A8,@080c00000h,1
MOVK 7,A8
MOVE A8,@080c00000h,1
MOVI 102,A8
MOVE A8,@080c00020h,1
MOVK 16,A8
MOVE A8,@080c00040h,1
MOVE @080c00000h,A9,1
ANDI 255,A9
CMPK 19,A9
JRZ _uartgood
MOVK 1,A0
FRET b5
_uartgood:
_uart_local_loopback_test:
MOVK 26,A8
MOVE A8,@080c00040h,1
MOVI 48,A8
MOVE A8,@080c00040h,1
MOVK 32,A8
MOVE A8,@080c00040h,1
MOVK 19,A8
MOVE A8,@080c00000h,1
MOVI 135,A8
MOVE A8,@080c00000h,1
MOVI 102,A8
MOVE A8,@080c00020h,1
MOVK 16,A8
MOVE A8,@080c00040h,1
MOVI 80,A8
MOVE A8,@080c00040h,1
MOVK 32,A8
MOVE A8,@080c00040h,1
MOVI 69,A8
MOVE A8,@080c00040h,1
CLRS A9
_uart_llb1:
move a8,@060c000c0h,1
MOVE A9,@080c00060h,1
MOVI 10000,A11
SETF 16,0
MOVE @080c00020h,A8
BTST 0,A8
JRNZ _uart_llb4
_uart_llb2:
move a8,@060c000c0h,1
DSJ A11,_uart_llb3
MOVK 1,A0
FRET B5
_uart_llb3:
SETF 16,0
MOVE @080c00020h,A8
BTST 0,A8
JRZ _uart_llb2
_uart_llb4:
move a8,@060c000c0h,1
MOVE @080c00060h,A10,1
ANDI 255,A10
CMP A9,A10
JRZ _uart_llb5
MOVK 1,A0
FRET B5
_uart_llb5:
ADDK 1,A9
CMPI 256,A9
JRLO _uart_llb1
CLRS A0
FRET B5
**************************************************************************
* *
* POWERTST *
* *
* POWERUP SELF TEST ROUTINES *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
POWERTST
DINT
SETF 16, 0, 0
SETF 32, 0, 1
MOVB B14,@WDOG_BONE ;THROW A BONE
; HALT DMA AND ENABLE CACHE
CLR A14
MOVE A14,@DMAGOREG,L
MOVE A14,@DMAGOREG,L
MOVE A14,@CONTROL
MOVE A14,@DMACMAPCON,1
; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED
MOVI SYSC_COLD,A13
MOVE A13,@SYSCTRL0,L ; XUNIT
srl 8,a13 ; XUNIT
MOVE A13,@SYSCTRL1,L ; XUNIT
MOVI STCKST,SP,L
; INITIALIZE IO REGISTERS
MOVI INITDATA,B0
MOVI VESYNC,B2
MOVI IDATALEN,B7
BLMOVE 1,1 ;TRANSFER I/O REGS
movi DPYSTRT0,a14 ; XUNIT
move a14,@DPYST,L ; XUNIT
JRUC POWERCPUTEST
PONTEST
MOVI SYSCINIT&(~WRPROTHI),A0
MOVE A0,@SYSCOPY,W
MOVE A0,@SYSCTRL0,L ; XUNIT
srl 8,a0 ; XUNIT
MOVE A0,@SYSCTRL1,L ; XUNIT
JAUC POWERRET
DOG_COUNT .EQU 8000H ;EVERY 32K
**************************************************************************
* *
* 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 *
* *
**************************************************************************
.ALIGN ;LET'S CACHE THIS BITCH
RAMCHECK:
MOVB B14,@WDOG_BONE ;THROW A BONE
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
MOVI DOG_COUNT,B14
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 B14,RAC1_NODOG
MOVB B14,@WDOG_BONE ;THROW A BONE
MOVI DOG_COUNT,B14 ;AND RELOAD COUNT
RAC1_NODOG
DSJS A9,RAC1
; READBACK IN ASCENDING ORDER
MOVE A13, A9 ; XEROX COUNT
MOVE A12, A8 ; XEROX START
MOVI RANDOM_SEED, A7, L
MOVI DOG_COUNT,B14
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 B14,RAC5_NODOG
MOVB B14,@WDOG_BONE ;THROW A BONE
MOVI DOG_COUNT,B14 ;AND RELOAD COUNT
RAC5_NODOG
DSJS A9,RAC3
RAC6
MOVB B14,@WDOG_BONE ;THROW A BONE FOR GOOD MEASURE
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
**************************************************************************
* *
* START OF DIAG CACHE SEGMENT *
* *
**************************************************************************
.ALIGN ;LET'S CACHE THIS BITCH
.IF 0
**************************************************************************
* *
* ROMCHECK - ROUTINE TO CHECKSUM THE PROGRAM AND IMAGE ROMS. *
* RETURNS *
* B0 = BITS SET FOR BAD ROMS. *
* Z = TEST FINISHED. *
* NZ = TEST ABORTED BY USER. *
* *
**************************************************************************
ROMCHECK:
MOVB B14,@WDOG_BONE ;THROW A BONE
ROMLOOP
CLR B2
MOVE *A14(ROM_CKSM),A13,L ; CHECK TO SEE IF ROM SOCKET THERE
JRZ ROMEMPTY
CLR A8 ; CHECKSUM
MOVI DOG_COUNT,B14
MOVE *A14(ROM_SADR),A12,L ; STARTING ADDRESS
MOVE *A14(ROM_EADR),A13,L ; ENDING ADDRESS
MOVE *A14(ROM_ITLV),A11,W ; INTERLEAVE
;
; SUM UP A GIVEN IMAGE ROM -- THE TUNIT WAY
;
SUB A12,A13 ; (( EADDR - SADDR ) / INTERLEAVE) + 1
DIVU A11,A13
INC A13
RCILP
MOVB *A12,A7
SLL 24,A7
SRL 24,A7
ADD A11,A12
ADD A7,A8
DSJS B14,RCILP_NODOG
MOVB B14,@WDOG_BONE ;THROW A BONE
MOVI DOG_COUNT,B14 ;AND RELOAD COUNT
RCILP_NODOG
DSJS A13,RCILP
MOVE *A14(ROM_WDTH),A10,W ; WIDTH
JRNZ ROMCKCK ;ACTUALLY A FLAG FOR IMAGE OR PROG
MOVE *A14(ROM_NMBR),A4,W ;WHICH PROGRAM ROM ARE WE CHECKING?
cmpk 3,a4
jrlt PROGRAM_2
move @CHECKSUM3,A7,W
jruc ROM_COMPARE
PROGRAM_2
cmpk 2,a4
jrlt PROGRAM_1
move @CHECKSUM2,A7,W
jruc ROM_COMPARE
PROGRAM_1
cmpk 1,a4
jrlt PROGRAM_0
move @CHECKSUM1,A7,W
jruc ROM_COMPARE
PROGRAM_0
MOVE @CHECKSUM0,A7,W ;LOAD HARD CODED CHECKSUM
*LAND HERE FROM IMAGE CHECKSUM TO DETERMINE IF WE HIT IT
ROMCKCK
MOVE *A14(ROM_CKSM),A7,W
ROM_COMPARE
ZEXT A7
ZEXT A8
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
MOVB B14,@WDOG_BONE ;THROW A BONE
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
*CHECKING FOR EARLY EXIT BY OPERATOR
MOVE @COINS,A13,W ; XUNIT
MOVE A13,A8
ANDI 00000004H,A13 ;CHECK PLAYER 1 START
JRZ ROMABORT ;BR = IT'S PRESSED
ANDI 00000020H,A8 ;CHECK PLAYER 2 START
JRZ ROMABORT ;BR = IT'S PRESSED
JRUC ROMLOOP ;BACK FOR THE NEXT
*HERE ON OPERATOR ABORT
ROMABORT
CLRZ
ROMEMPTY
FRET B5
.ENDIF
******************************************************************************
* *
* _ROM_SUMS *
* *
* Calculates and checks the checksums of a bank of 4 Image or Program ROMS. *
* The function calculates 16 bit checksums for each of 4 Images or Program *
* ROMS and checks the calculated checksums against those stored in the code. *
* *
* ENTRY *
* A0 - Pointer to ROMBANK Structure *
* *
* EXIT *
* A - Result Flags *
* Bit Value Meaning *
* 0 0 ROM with data bits 0 - 7 OK *
* 1 ROM with data bits 0 - 7 FAILED *
* 1 0 ROM with data bits 8 - 15 OK *
* 1 ROM with data bits 8 - 15 FAILED *
* 2 0 ROM with data bits 16 - 23 OK *
* 1 ROM with data bits 16 - 23 FAILED *
* 3 0 ROM with data bits 24 - 31 OK *
* 1 ROM with data bits 24 - 31 FAILED *
* *
* USES *
* A1, A2, A4, A3, A5, A6, A7, A8, A9, A10, A11, A12, A13, B5 *
* *
******************************************************************************
_rom_sums:
clr a13 ; Set flag to say test PASSED
_rom_loop:
movk 4,a4
_rom_spec_loop:
movk 4,a11
move *a0+,a10,1
move sp,a12
movi 020001000h,sp
mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13
move b5,a12
FCALL CHIPOUT,b5
move a12,b5
mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13
move a12,sp
dsjs a4,_rom_spec_loop
subi 128,a0
move a0,@WDOG_BONE,1
setf 16,0
move *a0(128),a8,1 ; Get start address of bank
move *a0(160),a9,1 ; End address of bank
sub a8,a9 ; Calc bank length (long words)
srl 5,a9
movi CKSUM_WORK,a1
clr a2
move a2,*a1,0 ; zero out current value
move a2,*a1(16),0 ; zero out current value
move a2,*a1(32),0 ; zero out current value
move a2,*a1(48),0 ; zero out current value
_calc_sums: ; For each ROM calculate checksum
btst 18,a8
jrz _calc_nodoggy
move a8,a4
srl 7,a4
andi 7fffh,a4
_wait_blank:
move @0c0000030h,a2
_wb_loop:
move @0c00001d0h,a10
cmp a2,a10
jrgt _wb_loop
move a4,@0A08000C0h,1
move a0,@WDOG_BONE,1
_calc_nodoggy:
move @COINS,a11,1
not a11
andi 0664h,a11
jrnz _rom_sum_abort
move *a8+,a5,1 ; read data from rom
movk 4,a2
_calc_sum: ; Add values for each ROM
move a5,a6 ; value read -> a6
andi 0ffh,a6 ; mask off bits not interested in
move *a1,a7,0 ; read current value
add a6,a7 ; add read value to current value
move a7,*a1+,0 ; store back in save area
srl 8,a5 ; get next rom vale
dsjs a2,_calc_sum ; do until 4 bytes are done
subi 64,a1 ; set pointer back to start of save area
dsj a9,_calc_sums ; do until all data read from roms
move @_rom_type,a3
jrz _image_roms
movi CHECKSUM0,a3
jruc _cksum_ptr_set
_image_roms:
move a0,a3 ; generate pointer to checksums
addi 192,a3
_cksum_ptr_set:
movk 4,a4
_check_sums: ; check stored checksums against calculated checksums
move a0,@WDOG_BONE,1
movk 1,a11 ; set flag to say rom is OK
move *a0+,a10,1 ; set pointer to table for this rom
move *a1+,a8,0 ; get calculated checksum for this rom
move *a3+,a9,0 ; get stored checksum for this rom
cmp a8,a9 ; are they the same ?
jrz _cksum_ok ; YES - FARM OUT!!!
movk 2,a11 ; NOPE - BUMMER DUDE - Tell CHIPOUT
ori 080000000h,a13 ; set bit for caller bit 0 = LSB, 3 = MSB
_cksum_ok:
srl 1,a13
move sp,a12
movi 020001000h,sp
mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13
move b5,a12
FCALL CHIPOUT,b5 ; Draw the friggin' thing
move a12,b5
mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13
move a12,sp
dsjs a4,_check_sums ; Do until all 4 roms checked
addi 192,a0
move *a0,a1,1
jrnz _rom_loop
_rom_sums_done:
move a13,a13
jrz _rsd_1
movk 1,b0
_rsd_1:
move a13,a13
FRET b5
_rom_sum_abort:
movk 1,a13
clr b0
jruc _rsd_1
.IF PRINTER
.ELSE
**************************************************************************
* *
* 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
**************************************************************************
* *
* COLORBAR *
* *
**************************************************************************
COLORBAR:
; =========================
; | SET PALETTE 0 FOR |
; | COLOR BARS. |
; =========================
MOVI INTENSITIES_START,A0,L
MOVI COLRAM+(5*PALSIZE),A1,L ;START UP A LITTLE BIT
MOVK 16,A2 ;5 BITS/COLOR
MOVK 1,A6 ;1 PALETTE(S) TO COVER 8 BARS
CB2
MOVK 8,A7 ;8 BARS/PALETTE
CB3
MOVE *A0+,A3 ;STARTING COLOR
MOVE *A0+,A4 ;COLOR DECREMENT
MOVE A2,A5
CB4
MOVE A3,*A1+,L ; XUNIT
SUB A4,A3
DSJS A5,CB4
DSJS A7,CB3
ADDI 16*PALSIZE/NUMPAL,A1
DSJS A6,CB2
; =========================
; | DISPLAY COLOR BARS |
; =========================
CLR A14
MOVE A14,@DMAGOREG,L ;HALT THE DMA
MOVI [0,0101H],A14 ;PALETTE INCREMENT
MOVI [0,0505H],A8 ;START AT THIS PALETTE
MOVI COLOR_BARS,A3,L ;COLOR BAR TABLE
MOVI [16,0],A13,L ;POSITION INCRMENT
MOVI 01010101H,A12 ; XUNIT
MOVK 16,A11 ;# INTENSITIES / BAR
MOVK 1,A6 ;THIS MANY GROUPS OF 8 BARS
CLR A2 ;STARTING COLOR
CB5
MOVK 8,A7 ;THIS MANY BARS PER PALETTE
CB6
MOVE *A3+,A1,L
JRZ CB8
MOVE A8,@DMACMAPCON,L ;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
DSJ A7,CB6 ;NEXT BAR PLEASE
ADD A14,A8 ;NEXT BAR & PALETTE PLEASE
DSJ A6,CB5
CB8
CLR A14
MOVE A14,@DMACMAPCON,L
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
**************************************************************************
* *
* DIPTEST *
* *
* DIP SWITCH TESTING *
* *
**************************************************************************
DIPTEST:
MOVKM 1,@DIAG_DFLAG,W
MOVKM 1,@DIP1ST,W ;YES THIS IS THE FIRST TIME THROUGH
DT_PLOT
CALLA DIAG_SRT_CLR
MOVI DIP_BOXES,A9
DTVLP1
MOVE *A9+,A1,L
JRZ DSWDONE
MOVE *A9+,A0,L
MOVE *A9+,A2,W
FCALL RECTANGLE,B6
JRUC DTVLP1
DSWDONE
MOVI DIP_VECS,A9
DLINES
MOVE *A9+,A2,W
JRZ DTVDONE
MOVE *A9+,A0,L
MOVE *A9+,A1,L
FCALL HVLINE,B6
JRUC DLINES
DTVDONE
MOVI DIP_STRS,A9
CALLR STR_PLOT
CALLR DIPPLOT
CALLR DIPSTATE
MOVE @DIP1ST,A14,W
JRNZ DTL_SKIP_SND
calla read_dip
btst 15,a0
jrnz DTL_SKIP_SND
MOVI DIP_SND,A0
calla ONESND
DTL_SKIP_SND
CLRM @DIP1ST,W
_up_wait:
PAUSE 10000,B6
FCALL FREAD_SW1_CNS,B6 ; XUNIT
FCALL FREAD_SW2_DIP,B6
ori 0ffff0000h,a10
and a10,a0
ANDI 00401010H,A0
cmpi 00401010h,a0
jrnz _up_wait
MOVE A0,@SWSET1,L
DTLOOP
PAUSE 100000,b6
CALLA CKTEST ; EMERGENCY EXIT
FCALL FREAD_SW1_CNS,B6 ; XUNIT GOTTA SEE IF TIME TO LEAVE
FCALL FREAD_SW2_DIP,B6
ori 0ffff0000h,a10
and a10,a0
MOVE @SWSET1,A1,L
ANDI 00401010H,A0
CMP A0,A1
JRNZ DT_X
CALLR read_dip
MOVE @DIPVAL,A1,W
ANDI 0FFFFH,A1 ;FUCKING SIGN EXTEND
CMP A0,A1
JRZ DTLOOP ;BR = NO CHANGE
MOVE A0,@DIPVAL,W ;SAVE THE OLD
JRUC DT_PLOT ;PLOT THE NEW SWITCH STUFF
DT_X
_up_wait1:
PAUSE 100000,B6
FCALL FREAD_SW1_CNS,b6
FCALL FREAD_SW2_DIP,b6
ori 0ffff0000h,a10
and a10,a0
andi 00401010H,a0
cmpi 00401010h,a0
jrnz _up_wait1
pause 100000,b6
CLRM @DIAG_DFLAG,W
RETS
**************************************************************************
* *
* DIPSTATE *
* *
* PLOT OUT THE STATES OF ALL THE DIP SWITCHES *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
DIPSTATE
CALLR read_dip
MOVE A0,A10 ;LET'S KEEP A COPY
CLR A2
MOVI COLOR_WHITE,A3
MOVI DMIRROR_0,A1
ANDI DPMIRROR,A0 ;MIRROR?
JRZ SD1
MOVI DMIRROR_1,A1
SD1
MOVE A1,A0
MOVI [82,75],A1
FCALL STRING,B6
MOVI DUSECMOS_0,A1
MOVE A10,A0
ANDI DPUSECMOS,A0
JRZ DS1
MOVI DUSECMOS_1,A1
DS1
MOVE A1,A0
MOVI [94,75],A1
FCALL STRING,B6
*PLOT CURRENT COINAGE
MOVI COLOR_WHITE,A3
MOVI [112,75],A1
MOVI DCOINAGE,A0
FCALL STRING,B6
MOVE A10,A0
ANDI DPCOUNTRY,A0
SRL SR_DPCOUNTRY,A0
SLL 5,A0
DCC_CZ
ADDI DCOINTAB,A0
MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE
MOVE A10,A0
ANDI DPCOINAGE,A0
SRL SR_DPCOINAGE,A0
SLL 5,A0
ADD A0,A1
MOVE *A1,A0,L ; NOW POINTING AT MESSAGE
CLR A2
MOVI [124,75],A1
FCALL STRING,B6
*PLOT CREDITS TO START, CREDITS TO CONTINUE
MOVI DCREDITS,A0
MOVI [144,75],A1
FCALL STRING,B6
MOVI DTOSTART,A0
MOVI [155,88],A1
FCALL STRING,B6
MOVI DTOCONTINUE,A0
MOVI [166,88],A1
FCALL STRING,B6
MOVE A10,A7
ANDI DPCREDITS,A7
SRL SR_DPCREDITS,A7
SLL 6,A7
ADDI DCREDTAB,A7
MOVE *A7+,A0,L
MOVI [155,75],A1
FCALL STRING,B6
MOVE *A7+,A0,L
MOVI [166,75],A1
FCALL STRING,B6
*PLOT COUNTRY SELECTION
MOVE A10,A0
ANDI DPCOUNTRY,A0
SRL SR_DPCOUNTRY,A0
SLL 5,A0
ADDI DCOUNTRY_TAB,A0
MOVE *A0,A0,L
MOVI [88,285],A1
FCALL STRING,B6
; MOVI DUNUSED,A0
; MOVI [106,285],A1
; FCALL STRING,B6
move a10,a0
andi 0400h,a0
srl 5,a0
addi DPUTAB,a0
move *a0,a0,L
movi [106,285],a1
FCALL STRING,b6
;
MOVI DCOUNTER_0,A1
MOVE A10,A0
ANDI DPCOUNTER,A0 ; COUNTER
JRZ SD2
MOVI DCOUNTER_1,A1
SD2
MOVE A1,A0
MOVI [118,285],A1
FCALL STRING,B6
MOVE A10,A0
ANDI DPPLAYERS,A0
SRL SR_DPPLAYERS,A0
andi 1,a0
SLL 5,A0
ADDI DPLAYER_TAB,A0
MOVE *A0,A0,L
; MOVI [136,285],A1
MOVI [129,285],A1
FCALL STRING,B6
move a10,a0
andi 02000h,a0
srl 8,a0
addi DUPGRADE_TAB,a0
move *a0,a0,L
movi [141,285],a1
FCALL STRING,b6
MOVI DFREEZE_0,A0
MOVI [154,285],A1
FCALL STRING,B6
MOVI DTEST_0,A0
MOVI [166,285],A1
FCALL STRING,B6
RETS
.ENDIF
**************************************************************************
* *
* CHECKDIPFREE *
* *
* CHECK TO SEE IF EITHER OF THE COIN SLOTS IS ON FREE PLAY, *
* AND IF SO RETURN Z, OTHERWISE DON'T *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* .EQ. YES, FREEPLAY *
* *
**************************************************************************
CHECKDIPFREE:
PUSH A0
CALLR read_dip
ANDI DPCOINAGE,A0
CMPI DPCOINAGE,A0
CDFRET
PULL A0
RETS
.IF PRINTER
.ELSE
**************************************************************************
* *
* DIPPLOT *
* *
* PLOT OUT THE DIP SWITCHES *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
DIPPLOT:
CALLR read_dip
CLR A2
DIPLOOP
MOVE A2,A3
SLL 5,A3
ADDI DIPYTAB,A3
MOVE *A3,A3,L
SLL 16,A3 ; GOT THE Y LOC
CLR A5
CMPI 8,A2 ;Is this switch in the Second bank?
JRLO DIPL2 ;BR = No
MOVI 210,A5 ;Second bank, change X plot position
DIPL2
MOVX A5,A3
BTST A2,A0 ; CHECK IF BIT IS SET
JRNZ DIPON
MOVI DP_OFF,A1
ADDI 29,A3
MOVI COLOR_GREY,A4
JRUC DIPSTR
DIPON
MOVI DP_ON,A1
ADDI 32,A3
MOVI COLOR_WHITE,A4
DIPSTR
MMTM SP,A0,A2
SETF 16,0
MOVE @0C0000190H,A0
ORI 020H,A0
MOVE A0,@0C0000190H
MOVE A1,A0 ; SET STRING
MOVE A3,A1 ; SET LOCATION
MOVE A4,A3
CLR A2 ; HORIZONTAL
FCALL STRING,B6
SETF 16,0
MOVE @0C0000190H,A0
ANDNI 020H,A0
MOVE A0,@0C0000190H
MMFM SP,A0,A2
INC A2
CMPI 16,A2
JRLO DIPLOOP
RETS
DIPYTAB
; .LONG 39,51,63,75,87,99,111,123
; .LONG 39,51,63,75,87,99,111,123
.LONG 82,94,106,118,130,142,154,166
.LONG 82,94,106,118,130,142,154,166
.ENDIF
**************************************************************************
* *
* READ_DIP *
* *
* READ IN BOTH DIP SWITCHES *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* A0 DIP SWITCH *
* *
**************************************************************************
.text
.globl READ_DIP
READ_DIP:
MOVE @DIPSWITCH,A0,W ; READ IT IN
NOT A0 ; INVERT IT FOR TRUE BITS
RETS
.sect "COLDSTRT"
.globl read_dip
read_dip:
move @DIPSWITCH,a0,W
not a0
rets
**************************************************************************
* *
* SWITCHTEST *
* *
* DRAW OUT THE REVOLUTION X SWITCHES - A PRETTY PICTURE *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
.IF PRINTER
.ELSE
SWITCHTEST:
MOVKM 1,@DIAG_DFLAG,W
CLR A12 ; THE HOLD ME REGISTER
MOVE A12,@SWSET1,L
MOVE A12,@SWSET2,L
MOVE A12,@SWPREV1,L
MOVE A12,@SWPREV2,L
callr read_dip
andi 01000h,a0
jrz swtest_3play
movi BUT_TABLE1,a9
jruc swtest
swtest_3play:
MOVI BUT_TABLE,A9
swtest:
CLR A10
CALLR BUT_PLOT ; PLOT SOME BUTTONS
callr read_dip
andi 01000h,a0
jrz swtest_3play1
movi STR_TABLE1,a9
jruc swtest1
swtest_3play1:
MOVI STR_TABLE,A9
swtest1:
CALLR STR_PLOT ; PLOT THE STRINGS
MOVI 00AA0005H,A0
MOVI 00AA018BH,A1
MOVI COLOR_WHITE,A2
FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE
SDLOOP
FCALL FREAD_SW1_CNS,B6 ; XUNIT GRAB ME A SWITCH REGISTER
NOT A0
MOVE A0,A10
; ANDI DONEMASK,A0
; CMPI DONEMASK,A0,L ; CHECK FOR DONE
move @_cabinet_type,a11,1
jrnz sd_t2
XORI DONEMASK,a0
JRNZ SDGO
jruc SDDONE
sd_t2:
andi DONEMASK_T2,a0
cmpi DONEMASK_T2,a0
jrnz SDGO
SDDONE:
CLRM @DIAG_DFLAG,W
RETS
SDGO
andi 00040010h,a0
cmpi 00040010h,a0
jrz SDDONE
MOVE @SWSET1,A11,L
CMP A11,A10 ; CHECK FOR CHANGES
JRZ SDCK2
MOVE A10,@SWSET1,L
FCALL FREAD_SW2_DIP,B6 ; XUNIT
NOT A10
ANDI 0FFH,A10
MOVE A10,@SWSET2,L
JRUC SDPROC
SDCK2
FCALL FREAD_SW2_DIP,B6 ; XUNIT
NOT A10
ANDI 0FFH,A10
MOVE @SWSET2,A11,L
CMP A11,A10
JRZ SDLOOP
MOVE A10,@SWSET2,L
SDPROC
callr read_dip
andi 01000h,a0
jrz swtest_3play2
movi BUT_TABLE1,a9
jruc swtest2
swtest_3play2:
MOVI BUT_TABLE,A9
swtest2:
CALLR BUT_PLOT
MOVE @SWPREV1,A1,L
NOT A1
MOVE @SWSET1,A2,L
NOT A2
OR A2,A1
CMP A1,A2
JRNZ SDSOUND
MOVE @SWPREV2,A1,L
NOT A1
MOVE @SWSET2,A2,L
NOT A2
OR A2,A1
CMP A1,A2
JRZ SDNOSOUND
SDSOUND
MOVI SWITCH_SND,A0
calla ONESND
SDNOSOUND
MOVE @SWSET1,@SWPREV1,L
MOVE @SWSET2,@SWPREV2,L
JRUC SDLOOP
**************************************************************************
* *
* 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
MOVE *A9+,A0,W ; RADIUS
MOVE *A9+,A6,L ; COLOR
MOVE *A9+,A11,L ; GET MASK
ADDK 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
AND A10,A11 ; MASK OFF SOMETHING USEFUL
JRZ BPHOLLOW
SUBK 2,A0
ADDI CFILL,A6 ; MASK IN THE FILL BITS
JRUC BPCIRC
BPHOLLOW
MMTM SP,A0,A1,A6
SUBK 2,A0
MOVI COLOR_BLACK,A6
ADDI CFILL,A6
FCALL CIRCLE,B6
MMFM SP,A0,A1,A6
BPCIRC
FCALL CIRCLE,B6
JRUC BUT_PLOT
BPDONE
RETS
**************************************************************************
* *
* SWITCHSTR_PLOT - CHECK SWITCHES AND PLOT CORRESPONDING STRING. *
* A9 = POINTS TO SWITCH STRING TABLE LIST *
* A10 = SETTINGS OF THE SWITCH REGISTER *
* *
**************************************************************************
SWITCHSTR_PLOT:
MOVE *A9+,A1,L ;XY LOC
JRZ SSTR_DONE
MOVE *A9+,A0,L ;STRING PTR
MOVE *A9+,A3,W ;COLOR
MOVE *A9+,A2,W ;DIRECTION
MOVE *A9+,A11,L ;GET MASK
MOVE @SWSET1,A10,L
AND A10,A11 ;CHECK JUST OUR SWITCH
JRNZ SSTR_PLOT
MOVI COLOR_BLACK,A3
SSTR_PLOT
FCALL STRING,B6
JRUC SWITCHSTR_PLOT
SSTR_DONE
RETS
.ENDIF
**************************************************************************
* *
* 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
MOVE *A9+,A0,L ; STRING PTR
MOVE *A9+,A3,W ; COLOR
MOVE *A9+,A2,W ; DIRECTION
FCALL STRING,B6
JRUC STR_PLOT
STDONE
RETS
CFILL EQU 0FFFF0000H
;
; FORMAT
;
; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT
;
COLOR_P1 EQU COLOR_RED
COLOR_P2 EQU COLOR_YELLOW
COLOR_P3 EQU COLOR_BLUE
**************************************************************************
* *
* Y-UNIT DEFS *
* *
**************************************************************************
.IF PRINTER
.ELSE
BUT_TABLE:
BUT_MAC 200,186,10,COLOR_GREEN,00080000H,0,0 ; SLAM
BUT_MAC 200,209,10,COLOR_GREEN,00100000H,0,0 ; TEST
BUT_MAC 30,186,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT
BUT_MAC 30,209,10,COLOR_GREEN,00020000H,0,0 ; COIN RIGHT
BUT_MAC 115,186,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER
BUT_MAC 115,209,10,COLOR_GREEN,01000000H,0,0 ; XUNIT FOURTH COIN
BUT_MAC 30,232,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT
; PLAYER BUTTONS AND OTHER BUTTONS
BUT_MAC 70,60,15,COLOR_P1,00040000H,0,0 ;P1 START
BUT_MAC 195,60,15,COLOR_P2,00200000H,0,0 ;P2 START
BUT_MAC 70, 130,10,COLOR_P1,00000010H,0,0 ;P1 TRIGGER
BUT_MAC 70, 95,10,COLOR_P1,00000020H,0,0 ;P1 BOMB
BUT_MAC 195,130,10,COLOR_P2,00001000H,0,0 ;P2 TRIGGER
BUT_MAC 195,95,10,COLOR_P2,00002000H,0,0 ;P2 BOMB
BUT_MAC 285,186,10,COLOR_GREEN,10000000H,0,0 ;Volume Up
BUT_MAC 285,209,10,COLOR_GREEN,08000000H,0,0 ;Volume Down
BUT_MAC 130,232,10,COLOR_GREEN,20000000H,0,0 ;COIN INTERLOCK
BUT_MAC 230,232,10,COLOR_GREEN,80000000H,0,0 ;Bill Validator
BUT_MAC 320,60,15,COLOR_P3,02000000H,0,0 ;P3 START
BUT_MAC 320,130,10,COLOR_P3,00000010H,0,1 ;P3 TRIGGER
BUT_MAC 320,95,10,COLOR_P3,00000020H,0,1 ;P3 BOMB
.LONG 0
BUT_TABLE1:
BUT_MAC 200,186,10,COLOR_GREEN,00080000H,0,0 ; SLAM
BUT_MAC 200,209,10,COLOR_GREEN,00100000H,0,0 ; TEST
BUT_MAC 30,186,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT
BUT_MAC 30,209,10,COLOR_GREEN,00020000H,0,0 ; COIN RIGHT
BUT_MAC 115,186,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER
BUT_MAC 115,209,10,COLOR_GREEN,01000000H,0,0 ; XUNIT FOURTH COIN
BUT_MAC 30,232,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT
; PLAYER BUTTONS AND OTHER BUTTONS
BUT_MAC 35, 60,10,COLOR_P1,00040000H,0,0 ;P1 START
BUT_MAC 105,60,10,COLOR_P1,00040000H,0,0 ;P1 START
BUT_MAC 70, 130,10,COLOR_P1,00000010H,0,0 ;P1 TRIGGER
BUT_MAC 70, 95,10,COLOR_P1,00000020H,0,0 ;P1 BOMB
BUT_MAC 285,186,10,COLOR_GREEN,10000000H,0,0 ;Volume Up
BUT_MAC 285,209,10,COLOR_GREEN,08000000H,0,0 ;Volume Down
BUT_MAC 130,232,10,COLOR_GREEN,20000000H,0,0 ;COIN INTERLOCK
BUT_MAC 230,232,10,COLOR_GREEN,80000000H,0,0 ;Bill Validator
BUT_MAC 285,60,10,COLOR_P3,00200000H,0,0 ;P2 START
BUT_MAC 355,60,10,COLOR_P3,00200000H,0,0 ;P2 START
BUT_MAC 320,130,10,COLOR_P3,00001000H,0,0 ;P2 TRIGGER
BUT_MAC 320,95,10,COLOR_P3,00002000H,0,0 ;P2 BOMB
.LONG 0
DONEMASK_T2 EQU 00040010H ; P1 START + P1 TRIGGER
DONEMASK EQU 00500000H ; TEST + ESCAPE
;SWITCHSTR_TAB
; SW_MAC 10, 30,P1START,COLOR_P1,0,00040000H ;P1 START
; SW_MAC 240,30,P2START,COLOR_P2,0,00200000H ;P2 START
; SW_MAC 10, 50,P1_TRIGGER,COLOR_P1,0,00000010H ;P1 TRIGGER
; SW_MAC 10, 70,P1_BOMB,COLOR_P1,0,00000020H ;P1 BOMB
; SW_MAC 240,50,P2_TRIGGER,COLOR_P2,0,00001000H ;P2 TRIGGER
; SW_MAC 240,70,P2_BOMB,COLOR_P2,0,00002000H ;P2 BOMB
; .LONG 0
STR_TABLE:
STR_MAC 88,5,SWITCH_TITLE,COLOR_WHITE,0 ;TITLE
; Player switch titles
STR_MAC 45,27,PLAY1_MESS,COLOR_RED,0
STR_MAC 170,27,PLAY2_MESS,COLOR_YELLOW,0
STR_MAC 295,27,PLAY3_MESS,COLOR_BLUE,0
STR_MAC 212,182,SLAM,COLOR_GREEN,0 ;SLAM
STR_MAC 212,205,TEST,COLOR_GREEN,0 ;TEST SWITCH
STR_MAC 42,182,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN
STR_MAC 42,205,RIGHTSLOT,COLOR_GREEN,0 ;RIGHT COIN
STR_MAC 127,182,CENTER,COLOR_GREEN,0 ;CENTER COIN
STR_MAC 127,205,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE
.IF GERMAN
STR_MAC 25,150,EXITMESS1,COLOR_WHITE,0 ;EXIT MESSAGE 1
STR_MAC 185,160,EXITMESS2,COLOR_WHITE,0 ;EXIT MESSAGE 2
.ELSE
STR_MAC 25,150,EXITMESS1,COLOR_WHITE,0 ;EXIT MESSAGE 1
STR_MAC 185,160,EXITMESS2,COLOR_WHITE,0 ;EXIT MESSAGE 2
.ENDIF
STR_MAC 88,56,START_MESS,COLOR_P1,0 ; Player 1 Start
STR_MAC 213,56,START_MESS,COLOR_P2,0 ; Player 2 Start
STR_MAC 82,126,TRIGGER_MESS,COLOR_P1,0 ; Player 1 Trigger
STR_MAC 82,91,BOMB_MESS,COLOR_P1,0 ; Player 1 Bomb
STR_MAC 207,126,TRIGGER_MESS,COLOR_P2,0 ; Player 2 Trigger
STR_MAC 207,91,BOMB_MESS,COLOR_P2,0 ; Player 2 Bomb
STR_MAC 297,182,VUP_MESS,COLOR_GREEN,0 ; Volume Up
STR_MAC 297,205,VDOWN_MESS,COLOR_GREEN,0 ; Volume Down
STR_MAC 42,223,SERVICE_MESS,COLOR_GREEN,0 ; Service Credit
STR_MAC 42,233,SERVICE_MESS1,COLOR_GREEN,0 ; Service Credit
STR_MAC 142,223,INTERLOCK_MESS,COLOR_GREEN,0 ; Interlock
STR_MAC 142,233,INTERLOCK_MESS1,COLOR_GREEN,0 ; Interlock
STR_MAC 242,223,BILL_VALID_MESS,COLOR_GREEN,0 ; Bill Validator
STR_MAC 242,233,BILL_VALID_MESS1,COLOR_GREEN,0 ; Bill Validator
STR_MAC 338,56,START_MESS,COLOR_P3,0 ; Player 3 Start
STR_MAC 332,126,TRIGGER_MESS,COLOR_P3,0 ; Player 3 Trigger
STR_MAC 332,91,BOMB_MESS,COLOR_P3,0 ; Player 3 Bomb
.LONG 0
STR_TABLE1:
STR_MAC 88,5,SWITCH_TITLE,COLOR_WHITE,0 ;TITLE
; Player switch titles
STR_MAC 45,27,PLAY1_MESS,COLOR_RED,0
STR_MAC 295,27,PLAY2_MESS,COLOR_BLUE,0
STR_MAC 212,182,SLAM,COLOR_GREEN,0 ;SLAM
STR_MAC 212,205,TEST,COLOR_GREEN,0 ;TEST SWITCH
STR_MAC 42,182,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN
STR_MAC 42,205,RIGHTSLOT,COLOR_GREEN,0 ;RIGHT COIN
STR_MAC 127,182,CENTER,COLOR_GREEN,0 ;CENTER COIN
STR_MAC 127,205,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE
.IF GERMAN
STR_MAC 25,150,EXITMESS1,COLOR_WHITE,0 ;EXIT MESSAGE 1
STR_MAC 185,160,EXITMESS2,COLOR_WHITE,0 ;EXIT MESSAGE 2
.ELSE
STR_MAC 25,150,EXITMESS1,COLOR_WHITE,0 ;EXIT MESSAGE 1
STR_MAC 185,160,EXITMESS2,COLOR_WHITE,0 ;EXIT MESSAGE 2
.ENDIF
STR_MAC 16,41,START_MESS,COLOR_P1,0 ; Player 1 Start
STR_MAC 86,41,START_MESS,COLOR_P1,0 ; Player 1 Start
STR_MAC 82,126,TRIGGER_MESS,COLOR_P1,0 ; Player 1 Trigger
STR_MAC 82,91,BOMB_MESS,COLOR_P1,0 ; Player 1 Bomb
STR_MAC 297,182,VUP_MESS,COLOR_GREEN,0 ; Volume Up
STR_MAC 297,205,VDOWN_MESS,COLOR_GREEN,0 ; Volume Down
STR_MAC 42,223,SERVICE_MESS,COLOR_GREEN,0 ; Service Credit
STR_MAC 42,233,SERVICE_MESS1,COLOR_GREEN,0 ; Service Credit
STR_MAC 142,223,INTERLOCK_MESS,COLOR_GREEN,0 ; Interlock
STR_MAC 142,233,INTERLOCK_MESS1,COLOR_GREEN,0 ; Interlock
STR_MAC 242,223,BILL_VALID_MESS,COLOR_GREEN,0 ; Bill Validator
STR_MAC 242,233,BILL_VALID_MESS1,COLOR_GREEN,0 ; Bill Validator
STR_MAC 266,41,START_MESS,COLOR_P3,0 ; Player 3 Start
STR_MAC 336,41,START_MESS,COLOR_P3,0 ; Player 3 Start
STR_MAC 332,126,TRIGGER_MESS,COLOR_P3,0 ; Player 3 Trigger
STR_MAC 332,91,BOMB_MESS,COLOR_P3,0 ; Player 3 Bomb
.LONG 0
.IF GERMAN
SWITCH_TITLE
.STRING "REVOLUTION X - KONTAKT-TEST",0
EXITMESS1
.STRING "ENTER UND ESCAPE OR SPIELER 1 START UND TRIGGER",0
.EVEN
EXITMESS2
.STRING "ZUM VERLASSEN",0
.EVEN
LEFTSLOT
.STRING "LINK.",0
.EVEN
RIGHTSLOT
.STRING "RECHT.",0
.EVEN
SERVICE1
.STRING "SERVICE",0
.EVEN
SERVICE2
.STRING "KREDIT",0
.EVEN
.ELSE
SWITCH_TITLE
.STRING "REVOLUTION X - SWITCH TEST",0
EXITMESS1
.STRING "ENTER AND ESCAPE OR PLAYER 1 START AND TRIGGER",0
.EVEN
EXITMESS2
.STRING "TO EXIT",0
.EVEN
LEFTSLOT
.STRING "COIN 1",0
.EVEN
RIGHTSLOT
.STRING "COIN 2",0
.EVEN
;SERVICE1
; .STRING "SERVICE",0
; .EVEN
;SERVICE2
; .STRING "CREDIT",0
; .EVEN
VUP_MESS
.STRING "VOL UP",0
.EVEN
VDOWN_MESS
.STRING "VOL DOWN",0
.EVEN
SERVICE_MESS
.STRING "SERVICE",0
.EVEN
SERVICE_MESS1
.STRING "CREDIT",0
.EVEN
INTERLOCK_MESS
.STRING "COINDOOR",0
.EVEN
INTERLOCK_MESS1
.STRING "INTERLOCK",0
.EVEN
BILL_VALID_MESS
.STRING "BILL",0
BILL_VALID_MESS1
.STRING "VALIDATOR",0
.EVEN
.ENDIF
STSTART
.STRING "STARTS",0
.EVEN
PLAY1_MESS
.STRING "PLAYER 1",0
.EVEN
PLAY2_MESS
.STRING "PLAYER 2",0
.EVEN
PLAY3_MESS
.STRING "PLAYER 3",0
.EVEN
;P1START
START_MESS
.STRING "START",0
.EVEN
;P2START
; .STRING "START",0
; .EVEN
;P3START
; .STRING "START",0
; .EVEN
;P1_TRIGGER
TRIGGER_MESS
.STRING "TRIGGER",0
.EVEN
;P2_TRIGGER
; .STRING "TRIGGER",0
; .EVEN
;P3_TRIGGER
; .STRING "TRIGGER",0
; .EVEN
;P1_BOMB
BOMB_MESS
.STRING "BOMB",0
.EVEN
;P2_BOMB
; .STRING "BOMB",0
; .EVEN
;P3_BOMB
; .STRING "BOMB",0
; .EVEN
;COINMESS1
; .STRING "COIN1",0
; .EVEN
;COINMESS2
; .STRING "COIN2",0
; .EVEN
CENTER
.STRING "COIN 3",0
.EVEN
FOURTH
.STRING "COIN 4",0
.EVEN
SLAM
.STRING "SLAM",0
.EVEN
TEST
.STRING "TEST",0
.EVEN
;VIDEO
; .STRING "VIDEO FREEZE",0
; .EVEN
.ENDIF
.IF PRINTER
.ELSE
**************************************************************************
* *
* MONITOR TEST DATA AREA *
* *
**************************************************************************
MON_VECS:
VECMAC COLOR_WHITE,004,004,396,004
VECMAC COLOR_WHITE,004,004,004,250
VECMAC COLOR_WHITE,004,250,396,250
VECMAC COLOR_WHITE,396,250,396,004
VECMAC COLOR_WHITE,060,005,060,250
VECMAC COLOR_WHITE,115,005,115,250
VECMAC COLOR_WHITE,170,005,170,250
VECMAC COLOR_WHITE,225,005,225,250
VECMAC COLOR_WHITE,280,005,280,250
VECMAC COLOR_WHITE,335,005,335,250
VECMAC COLOR_WHITE,005,54,396,54
VECMAC COLOR_WHITE,005,103,396,103
VECMAC COLOR_WHITE,005,152,396,152
VECMAC COLOR_WHITE,005,201,396,201
.LONG 0
MON_RECS:
VECMAC COLOR_RED,182,000,030,005 ; TOP
VECMAC COLOR_GREEN,182,005,030,006
VECMAC COLOR_RED,182,250,030,005 ; BOTTOM
VECMAC COLOR_GREEN,182,244,030,006
VECMAC COLOR_RED,000,117,005,020 ; LEFT
VECMAC COLOR_GREEN,005,117,006,020
VECMAC COLOR_RED,396,117,005,020 ; RIGHT
VECMAC COLOR_GREEN,390,117,006,020
.LONG 0
MON_DOTS:
DOTMAC COLOR_WHITE,032,029
DOTMAC COLOR_WHITE,087,029
DOTMAC COLOR_WHITE,142,029
DOTMAC COLOR_WHITE,197,029
DOTMAC COLOR_WHITE,252,029
DOTMAC COLOR_WHITE,307,029
DOTMAC COLOR_WHITE,362,029
DOTMAC COLOR_WHITE,032,078
DOTMAC COLOR_WHITE,087,078
DOTMAC COLOR_WHITE,142,078
DOTMAC COLOR_WHITE,197,078
DOTMAC COLOR_WHITE,252,078
DOTMAC COLOR_WHITE,307,078
DOTMAC COLOR_WHITE,362,078
DOTMAC COLOR_WHITE,032,127
DOTMAC COLOR_WHITE,087,127
DOTMAC COLOR_WHITE,142,127
DOTMAC COLOR_WHITE,197,127
DOTMAC COLOR_WHITE,252,127
DOTMAC COLOR_WHITE,307,127
DOTMAC COLOR_WHITE,362,127
DOTMAC COLOR_WHITE,032,176
DOTMAC COLOR_WHITE,087,176
DOTMAC COLOR_WHITE,142,176
DOTMAC COLOR_WHITE,197,176
DOTMAC COLOR_WHITE,252,176
DOTMAC COLOR_WHITE,307,176
DOTMAC COLOR_WHITE,362,176
DOTMAC COLOR_WHITE,032,225
DOTMAC COLOR_WHITE,087,225
DOTMAC COLOR_WHITE,142,225
DOTMAC COLOR_WHITE,197,225
DOTMAC COLOR_WHITE,252,225
DOTMAC COLOR_WHITE,307,225
DOTMAC COLOR_WHITE,362,225
.LONG 0
PRIMARY_COLORS:
RECTMAC COLOR_RED,0,0,395,255
RECTMAC COLOR_GREEN,0,0,395,255
RECTMAC COLOR_BLUE,0,0,395,255
.LONG 0
COLOR_BARS:
; RECTMAC COLOR_BLACK, 0, 0, 49, 16
; RECTMAC COLOR_BLACK, 49, 0, 49, 16
; RECTMAC COLOR_BLACK, 98, 0, 49, 16
; RECTMAC COLOR_BLACK, 147, 0, 49, 16
; RECTMAC COLOR_BLACK, 196, 0, 49, 16
; RECTMAC COLOR_BLACK, 245, 0, 49, 16
; RECTMAC COLOR_BLACK, 294, 0, 49, 16
; RECTMAC COLOR_BLACK, 343, 0, 49, 16
RECTMAC COLOR_BLACK, 0, 0, 50, 16
RECTMAC COLOR_BLACK, 50, 0, 50, 16
RECTMAC COLOR_BLACK, 100, 0, 50, 16
RECTMAC COLOR_BLACK, 150, 0, 50, 16
RECTMAC COLOR_BLACK, 200, 0, 50, 16
RECTMAC COLOR_BLACK, 250, 0, 50, 16
RECTMAC COLOR_BLACK, 300, 0, 50, 16
RECTMAC COLOR_BLACK, 350, 0, 50, 16
.LONG 0
**************************************************************************
* *
* DIP SWITCH DISPLAY STUFF *
* *
**************************************************************************
;DIP_VECS:
; VECMAC COLOR_RED,20,32,60,32 ; DS1
; VECMAC COLOR_RED,20,32,20,138
; VECMAC COLOR_RED,20,138,60,138
; VECMAC COLOR_RED,60,32,60,138
;
; VECMAC COLOR_RED,230,32,270,32 ; DS2
; VECMAC COLOR_RED,230,32,230,138
; VECMAC COLOR_RED,230,138,270,138
; VECMAC COLOR_RED,270,32,270,138
;
; VECMAC COLOR_WHITE,63,42,73,42
;
; VECMAC COLOR_WHITE,63,54,73,54
;
; VECMAC COLOR_WHITE,63,66,68,66
; VECMAC COLOR_WHITE,63,90,68,90
; VECMAC COLOR_WHITE,68,66,68,90
; VECMAC COLOR_WHITE,68,78,73,78
;
; VECMAC COLOR_WHITE,63,102,68,102
; VECMAC COLOR_WHITE,63,126,68,126
; VECMAC COLOR_WHITE,68,102,68,126
; VECMAC COLOR_WHITE,68,114,73,114
;
; VECMAC COLOR_WHITE,273,42,278,42 ;COUNTRY
; VECMAC COLOR_WHITE,273,54,278,54
; VECMAC COLOR_WHITE,278,42,278,54
; VECMAC COLOR_WHITE,278,48,283,48
;
; VECMAC COLOR_WHITE,273,66,283,66 ;UNUSED
; VECMAC COLOR_WHITE,273,78,283,78 ;# OF COIN COUNTERS
;
; VECMAC COLOR_WHITE,273,90,278,90 ;# OF PLAYERS
; VECMAC COLOR_WHITE,273,102,278,102
; VECMAC COLOR_WHITE,278,90,278,102
; VECMAC COLOR_WHITE,278,96,283,96
;
; VECMAC COLOR_WHITE,273,114,283,114 ;VIDEO FREEZE
; VECMAC COLOR_WHITE,273,126,283,126 ;TEST SWITCH
DIP_BOXES:
RECTMAC COLOR_RED,20,75,40,106
RECTMAC COLOR_RED,230,75,40,106
.LONG 0
DIP_VECS:
VECMAC COLOR_WHITE,63,85,73,85
VECMAC COLOR_WHITE,63,96,73,96
VECMAC COLOR_WHITE,63,109,68,109
VECMAC COLOR_WHITE,63,133,68,133
VECMAC COLOR_WHITE,68,109,68,133
VECMAC COLOR_WHITE,68,121,73,121
VECMAC COLOR_WHITE,63,145,68,145
VECMAC COLOR_WHITE,63,169,68,169
VECMAC COLOR_WHITE,68,145,68,169
VECMAC COLOR_WHITE,68,157,73,157
VECMAC COLOR_WHITE,273,85,278,85 ;COUNTRY
VECMAC COLOR_WHITE,273,97,278,97
VECMAC COLOR_WHITE,278,85,278,97
VECMAC COLOR_WHITE,278,91,283,91
VECMAC COLOR_WHITE,273,109,283,109 ;UNUSED
VECMAC COLOR_WHITE,273,121,283,121 ;# OF COIN COUNTERS
; VECMAC COLOR_WHITE,273,133,278,133 ;# OF PLAYERS
; VECMAC COLOR_WHITE,273,145,278,145
; VECMAC COLOR_WHITE,278,133,278,145
; VECMAC COLOR_WHITE,278,139,283,139
VECMAC COLOR_WHITE,273,133,283,133 ;# OF PLAYERS
VECMAC COLOR_WHITE,273,145,283,145
VECMAC COLOR_WHITE,273,157,283,157 ;VIDEO FREEZE
VECMAC COLOR_WHITE,273,169,283,169 ;TEST SWITCH
.LONG 0
DIP_STRS:
; STR_MAC 124,8,DP_TITLE,COLOR_GREEN,0
; STR_MAC 30,20,DP_DS1,COLOR_WHITE,0
; STR_MAC 240,20,DP_DS2,COLOR_WHITE,0
; STR_MAC 7,39,DP_DSN1,COLOR_WHITE,0
; STR_MAC 7,51,DP_DSN2,COLOR_WHITE,0
; STR_MAC 7,63,DP_DSN3,COLOR_WHITE,0
; STR_MAC 7,75,DP_DSN4,COLOR_WHITE,0
; STR_MAC 7,87,DP_DSN5,COLOR_WHITE,0
; STR_MAC 7,99,DP_DSN6,COLOR_WHITE,0
; STR_MAC 7,111,DP_DSN7,COLOR_WHITE,0
; STR_MAC 7,123,DP_DSN8,COLOR_WHITE,0
;
; STR_MAC 217,39,DP_DSN1,COLOR_WHITE,0
; STR_MAC 217,51,DP_DSN2,COLOR_WHITE,0
; STR_MAC 217,63,DP_DSN3,COLOR_WHITE,0
; STR_MAC 217,75,DP_DSN4,COLOR_WHITE,0
; STR_MAC 217,87,DP_DSN5,COLOR_WHITE,0
; STR_MAC 217,99,DP_DSN6,COLOR_WHITE,0
; STR_MAC 217,111,DP_DSN7,COLOR_WHITE,0
; STR_MAC 217,123,DP_DSN8,COLOR_WHITE,0
;
; STR_MAC 100,150,DP_INS1,COLOR_WHITE,0
STR_MAC 124,8,DP_TITLE,COLOR_GREEN,0
STR_MAC 26,63,DP_DS1,COLOR_YELLOW,0
STR_MAC 236,63,DP_DS2,COLOR_YELLOW,0
STR_MAC 7,82,DP_DSN1,COLOR_YELLOW,0
STR_MAC 7,94,DP_DSN2,COLOR_YELLOW,0
STR_MAC 7,106,DP_DSN3,COLOR_YELLOW,0
STR_MAC 7,118,DP_DSN4,COLOR_YELLOW,0
STR_MAC 7,130,DP_DSN5,COLOR_YELLOW,0
STR_MAC 7,142,DP_DSN6,COLOR_YELLOW,0
STR_MAC 7,154,DP_DSN7,COLOR_YELLOW,0
STR_MAC 7,166,DP_DSN8,COLOR_YELLOW,0
STR_MAC 217,82,DP_DSN1,COLOR_YELLOW,0
STR_MAC 217,94,DP_DSN2,COLOR_YELLOW,0
STR_MAC 217,106,DP_DSN3,COLOR_YELLOW,0
STR_MAC 217,118,DP_DSN4,COLOR_YELLOW,0
STR_MAC 217,130,DP_DSN5,COLOR_YELLOW,0
STR_MAC 217,142,DP_DSN6,COLOR_YELLOW,0
STR_MAC 217,154,DP_DSN7,COLOR_YELLOW,0
STR_MAC 217,166,DP_DSN8,COLOR_YELLOW,0
STR_MAC 75,236,DP_INS1,COLOR_WHITE,0
.LONG 0
DP_DS1:
.STRING "U105",0
.EVEN
DP_DS2:
.STRING "U108",0
.EVEN
DP_DSN1
.STRING "1",0
.EVEN
DP_DSN2
.STRING "2",0
.EVEN
DP_DSN3
.STRING "3",0
.EVEN
DP_DSN4
.STRING "4",0
.EVEN
DP_DSN5
.STRING "5",0
.EVEN
DP_DSN6
.STRING "6",0
.EVEN
DP_DSN7
.STRING "7",0
.EVEN
DP_DSN8
.STRING "8",0
.EVEN
DUSECMOS_1:
.STRING "CMOS COINAGE",0
.EVEN
DUSECMOS_0:
.STRING "DIPSWITCH COINAGE",0
.EVEN
DMIRROR_0
.STRING "MIRROR DISPLAY",0
.EVEN
DMIRROR_1
.STRING "NORMAL DISPLAY",0
.EVEN
DCOUNTER_0
.STRING "ONE COUNTER",0
.EVEN
DCOUNTER_1
.STRING "TWO COUNTERS",0
.EVEN
DCOINAGE
.STRING "COINAGE",0
.EVEN
DCOUNTRY_0
.STRING "USA",0
.EVEN
DCOUNTRY_2
.STRING "FRENCH",0
.EVEN
DFREEZE_0
.STRING "VIDEO FREEZE",0
.EVEN
DREVX_CAB:
.STRING "REV X CABINET",0
.EVEN
DT2_CAB:
.STRING "T2 RETROFIT",0
.EVEN
DPLAYER_TAB
.LONG DPLAYER_0, DPLAYER_1, DPLAYER_2, DPLAYER_3
DUPGRADE_TAB:
.LONG DREVX_CAB, DT2_CAB
.IF GERMAN
DCOUNTRY_1
.STRING "DEUTSCH",0
.EVEN
DCOUNTRY_TAB
.LONG DCOUNTRY_1, DCOUNTRY_0, DCOUNTRY_2, DCOUNTRY_3
DCREDITS
.STRING "KREDITE...",0
.EVEN
DTOSTART
.STRING "BEI SPIELBEGINN",0
.EVEN
DTOCONTINUE
.STRING "ZUR SPIELFORTSET.",0
.EVEN
DTEST_0
.STRING "TEST",0
.EVEN
DPLAYER_0
.STRING "3 SPIELER",0
.EVEN
DPLAYER_1
.STRING "2 SPIELER",0
.EVEN
DPLAYER_2
.STRING "1 SPIELER",0
.EVEN
DPLAYER_3
.STRING "1 SPIELER",0
.EVEN
DUCOIN7
.STRING "FREISPIEL",0
.EVEN
DCOINTAB
.LONG DGCOINTAB, DUCOINTAB, DFCOINTAB, DUCOINTAB
DP_TITLE
.STRING "DIP-SCHALTER-TEST",0
.EVEN
DP_INS1
.STRING "BELIEBIGEN KNOPF DRUECKEN",0
.EVEN
DP_ON
.STRING "EIN",0
.EVEN
DP_OFF
.STRING "AUS",0
.ELSE
DCOUNTRY_1
.STRING "GERMAN",0
.EVEN
DCOUNTRY_TAB
.LONG DCOUNTRY_0, DCOUNTRY_1, DCOUNTRY_2, DCOUNTRY_3
DCREDITS
.STRING "CREDITS...",0
.EVEN
DTOSTART
.STRING "TO START",0
.EVEN
DTOCONTINUE
.STRING "TO CONTINUE",0
.EVEN
DTEST_0
.STRING "TEST SWITCH",0
.EVEN
DPLAYER_0
.STRING "3 PLAYER",0
.EVEN
DPLAYER_1
.STRING "2 PLAYER",0
.EVEN
DPLAYER_2
.STRING "1 PLAYER",0
.EVEN
DPLAYER_3
.STRING "1 PLAYER",0
.EVEN
DUCOIN7
.STRING "FREEPLAY",0
.EVEN
DCOINTAB
.LONG DUCOINTAB, DGCOINTAB, DFCOINTAB, DUCOINTAB
DP_TITLE
.STRING "DIPSWITCH SETTINGS",0
.EVEN
DP_INS1
.STRING "PRESS ESCAPE OR TRIGGER TO EXIT",0
.EVEN
DP_ON
.STRING "ON",0
.EVEN
DP_OFF
.STRING "OFF",0
.ENDIF
SECURITY_LEVEL_0_FAIL:
.STRING "LEVEL 0 SECURITY CHECK FAILURE",0
.EVEN
DUNUSED
DGCOIN4
DCOUNTRY_3
.STRING "UNUSED",0
.EVEN
PUTESTRUN:
.STRING "NO VALIDATOR",0
.EVEN
PUTESTBYPASS:
.STRING "VALIDATOR INST.",0
.EVEN
DPUTAB
.LONG PUTESTRUN, PUTESTBYPASS
DUCOINTAB
.LONG USA_1,USA_2,USA_3,USA_4,USA_ELECTITLE,DGCOIN4
.LONG DGCOIN4,DUCOIN7
DGCOINTAB
.LONG GERMAN_1,GERMAN_2,GERMAN_3,GERMAN_4,GERMAN_ELECTITLE
.LONG DGCOIN4,DGCOIN4,DUCOIN7
DFCOINTAB
.LONG FRENCH_1,FRENCH_2,FRENCH_3,FRENCH_4,FRENCH_ELECTITLE
.LONG DGCOIN4,DGCOIN4,DUCOIN7
DCREDTAB
.LONG DP_DSN2,DP_DSN2
.LONG DP_DSN2,DP_DSN1
.LONG DP_DSN1,DP_DSN1
.LONG DP_DSN3,DP_DSN1
.LONG DP_DSN4,DP_DSN1
.LONG DP_DSN3,DP_DSN2
.LONG DP_DSN4,DP_DSN2
.LONG DP_DSN3,DP_DSN3
.ENDIF
**************************************************************************
* *
* CPU BOARD INFORMATION *
* *
**************************************************************************
CPU_VECS:
VECMAC COLOR_WHITE,5,10,390,10 ; BOARD OUTLINE
VECMAC COLOR_WHITE,390,10,390,254
VECMAC COLOR_WHITE,5,253,390,253
VECMAC COLOR_WHITE,5,10,5,100
VECMAC COLOR_WHITE,5,100,15,100
VECMAC COLOR_WHITE,15,100,15,115
VECMAC COLOR_WHITE,5,115,15,115
VECMAC COLOR_WHITE,5,115,5,135
VECMAC COLOR_WHITE,5,135,15,135
VECMAC COLOR_WHITE,15,135,15,138
VECMAC COLOR_WHITE,5,138,15,138
VECMAC COLOR_WHITE,5,138,5,215
VECMAC COLOR_WHITE,5,215,15,215
VECMAC COLOR_WHITE,15,215,15,230
VECMAC COLOR_WHITE,5,230,15,230
VECMAC COLOR_WHITE,5,230,5,254
.LONG 0
CPUXBASE EQU 5
CPUYBASE EQU 5
CPU_CHIPS:
;CRAM1 CHIPMAC 0,125,25,20,45,7,11,CNAMEA8,1,2,2,1 ; COLOR RAM
;CRAM2 CHIPMAC 1,125,75,20,45,7,11,CNAMEC8,1,2,2,1 ; COLOR RAM
; XUNIT COLOR RAMS
CRAM1 CHIPMAC 0,50,151,30,13,4,3,CNAMEU67,0,28,2,1 ; COLOR RAM
CRAM2 CHIPMAC 1,50,166,30,13,4,3,CNAMEU77,0,28,2,1 ; COLOR RAM
;VRAM1 CHIPMAC 2,190,25,15,38,6,2,CNAMEA11,1,2,2,1 ; BANK 1 VIDEO RAM
;VRAM2 CHIPMAC 3,207,25,15,38,6,2,CNAMEA12,1,2,2,1 ; (PALETTE)
;VRAM3 CHIPMAC 4,224,25,15,38,6,2,CNAMEA13,1,2,2,1
;VRAM4 CHIPMAC 5,241,25,15,38,6,2,CNAMEA14,1,2,2,1
;VRAM5 CHIPMAC 6,190,71,15,38,6,2,CNAMEB11,1,2,2,1 ; BANK 2 VIDEO RAM
;VRAM6 CHIPMAC 7,207,71,15,38,6,2,CNAMEB12,1,2,2,1 ; (PIXEL)
;VRAM7 CHIPMAC 8,224,71,15,38,6,2,CNAMEB13,1,2,2,1
;VRAM8 CHIPMAC 9,241,71,15,38,6,2,CNAMEB14,1,2,2,1
; VRAM - XUNIT
VRAM1 CHIPMAC 2,90,201,30,11,4,2,CNAMEU99,0,28,2,1 ; BANK 1 VIDEO RAM
VRAM2 CHIPMAC 3,90,188,30,11,4,2,CNAMEU96,0,28,2,1 ; (PIXEL)
VRAM3 CHIPMAC 4,90,175,30,11,4,2,CNAMEU87,0,28,2,1
VRAM4 CHIPMAC 5,90,162,30,11,4,2,CNAMEU79,0,28,2,1
VRAM5 CHIPMAC 6,90,149,30,11,4,2,CNAMEU69,0,28,2,1 ; BANK 2 VIDEO RAM
VRAM6 CHIPMAC 7,90,136,30,11,4,2,CNAMEU62,0,28,2,1 ; (PALETTE)
VRAM7 CHIPMAC 8,90,123,30,11,4,2,CNAMEU48,0,28,2,1
VRAM8 CHIPMAC 9,90,110,30,11,4,2,CNAMEU38,0,28,2,1
;CPU CHIPMAC 0,330,60,35,35,4,13,CNAMEB21,0,3,3,1 ; CPU
; CPU - XUNIT
CPU CHIPMAC 0,297,45,35,35,7,13,CNAMEU19,0,32,32,1 ; CPU
;DMA CHIPMAC 0,201,120,38,38,6,16,CNAMEE13,0,3,3,1 ; DMA
; DMA - XUNIT
DMA CHIPMAC 0,165,161,26,26,2,9,CNAMEU76,0,23,23,1 ; DMA
;PROM1 CHIPMAC 1,155,210,20,40,7,3,CNAMEJ12,1,2,2,1 ; PROGRAM ROM 1
;PROM2 CHIPMAC 0,155,167,20,40,7,3,CNAMEG12,1,2,2,1 ; PROGRAM ROM 2
; PROGRAM ROMS - XUNIT
PROM1 CHIPMAC 0,213,128,40,13,10,3,CNAMEU51,0,38,2,1 ; PROGRAM ROM 1
PROM2 CHIPMAC 1,255,128,40,13,10,3,CNAMEU52,0,38,2,1 ; PROGRAM ROM 2
PROM3 CHIPMAC 2,297,128,40,13,10,3,CNAMEU53,0,38,2,1 ; PROGRAM ROM 2
PROM4 CHIPMAC 3,339,128,40,13,10,3,CNAMEU54,0,38,2,1 ; PROGRAM ROM 2
;IROM1 CHIPMAC 1,195,167,20,40,7,3,CNAMEG14,1,2,2,1 ; IMAGE ROM
;IROM2 CHIPMAC 2,217,167,20,40,7,3,CNAMEG16,1,2,2,1 ; IMAGE ROM
;IROM3 CHIPMAC 3,239,167,20,40,7,3,CNAMEG17,1,2,2,1 ; IMAGE ROM
;IROM4 CHIPMAC 4,261,167,20,40,7,3,CNAMEG18,1,2,2,1 ; IMAGE ROM
;
;IROM5 CHIPMAC 5,283,167,20,40,7,3,CNAMEG19,1,2,2,1 ; IMAGE ROM
;IROM6 CHIPMAC 6,305,167,20,40,7,3,CNAMEG20,1,2,2,1 ; IMAGE ROM
;IROM7 CHIPMAC 7,327,167,20,40,7,3,CNAMEG22,1,2,2,1 ; IMAGE ROM
;IROM8 CHIPMAC 8,349,167,20,40,7,3,CNAMEG23,1,2,2,1 ; IMAGE ROM
;
;IROM9 CHIPMAC 9,195,210,20,40,7,3,CNAMEJ14,1,2,2,1 ; IMAGE ROM
;IROM10 CHIPMAC 10,217,210,20,40,7,3,CNAMEJ16,1,2,2,1 ; IMAGE ROM
;IROM11 CHIPMAC 11,239,210,20,40,7,3,CNAMEJ17,1,2,2,1 ; IMAGE ROM
;IROM12 CHIPMAC 12,261,210,20,40,7,3,CNAMEJ18,1,2,2,1 ; IMAGE ROM
;
;IROM13 CHIPMAC 13,283,210,20,40,7,3,CNAMEJ19,1,2,2,1 ; IMAGE ROM
;IROM14 CHIPMAC 14,305,210,20,40,7,3,CNAMEJ20,1,2,2,1 ; IMAGE ROM
;IROM15 CHIPMAC 15,327,210,20,40,7,3,CNAMEJ22,1,2,2,1 ; IMAGE ROM
;IROM16 CHIPMAC 16,349,210,20,40,7,3,CNAMEJ23,1,2,2,1 ; IMAGE ROM
; IROM DATA - XUNIT
IROM1 CHIPMAC 1,213,233,40,13,6,3,CNAMEU120,0,38,2,1 ; IMAGE ROM
IROM2 CHIPMAC 2,255,233,40,13,6,3,CNAMEU121,0,38,2,1 ; IMAGE ROM
IROM3 CHIPMAC 3,297,233,40,13,6,3,CNAMEU122,0,38,2,1 ; IMAGE ROM
IROM4 CHIPMAC 4,339,233,40,13,6,3,CNAMEU123,0,38,2,1 ; IMAGE ROM
IROM5 CHIPMAC 5,213,218,40,13,6,3,CNAMEU110,0,38,2,1 ; IMAGE ROM
IROM6 CHIPMAC 6,255,218,40,13,6,3,CNAMEU111,0,38,2,1 ; IMAGE ROM
IROM7 CHIPMAC 7,297,218,40,13,6,3,CNAMEU112,0,38,2,1 ; IMAGE ROM
IROM8 CHIPMAC 8,339,218,40,13,6,3,CNAMEU113,0,38,2,1 ; IMAGE ROM
IROM9 CHIPMAC 9,213,203,40,13,6,3,CNAMEU101,0,38,2,1 ; IMAGE ROM
IROM10 CHIPMAC 10,255,203,40,13,6,3,CNAMEU102,0,38,2,1 ; IMAGE ROM
IROM11 CHIPMAC 11,297,203,40,13,6,3,CNAMEU103,0,38,2,1 ; IMAGE ROM
IROM12 CHIPMAC 12,339,203,40,13,6,3,CNAMEU104,0,38,2,1 ; IMAGE ROM
IROM13 CHIPMAC 13,213,188,40,13,10,3,CNAMEU91,0,38,2,1 ; IMAGE ROM
IROM14 CHIPMAC 14,255,188,40,13,10,3,CNAMEU92,0,38,2,1 ; IMAGE ROM
IROM15 CHIPMAC 15,297,188,40,13,10,3,CNAMEU93,0,38,2,1 ; IMAGE ROM
IROM16 CHIPMAC 16,339,188,40,13,10,3,CNAMEU94,0,38,2,1 ; IMAGE ROM
IROM17 CHIPMAC 17,213,173,40,13,10,3,CNAMEU81,0,38,2,1 ; IMAGE ROM
IROM18 CHIPMAC 18,255,173,40,13,10,3,CNAMEU82,0,38,2,1 ; IMAGE ROM
IROM19 CHIPMAC 19,297,173,40,13,10,3,CNAMEU83,0,38,2,1 ; IMAGE ROM
IROM20 CHIPMAC 20,339,173,40,13,10,3,CNAMEU84,0,38,2,1 ; IMAGE ROM
IROM21 CHIPMAC 21,213,158,40,13,10,3,CNAMEU71,0,38,2,1 ; IMAGE ROM
IROM22 CHIPMAC 22,255,158,40,13,10,3,CNAMEU72,0,38,2,1 ; IMAGE ROM
IROM23 CHIPMAC 23,297,158,40,13,10,3,CNAMEU73,0,38,2,1 ; IMAGE ROM
IROM24 CHIPMAC 24,339,158,40,13,10,3,CNAMEU74,0,38,2,1 ; IMAGE ROM
IROM25 CHIPMAC 25,213,143,40,13,10,3,CNAMEU63,0,38,2,1 ; IMAGE ROM
IROM26 CHIPMAC 26,255,143,40,13,10,3,CNAMEU64,0,38,2,1 ; IMAGE ROM
IROM27 CHIPMAC 27,297,143,40,13,10,3,CNAMEU65,0,38,2,1 ; IMAGE ROM
IROM28 CHIPMAC 28,339,143,40,13,10,3,CNAMEU66,0,38,2,1 ; IMAGE ROM
; PIC - XUNIT
PIC CHIPMAC 1,45,13,35,13,4,3,CNAMEU444,0,32,2,1 ; PIC
; UART - XUNIT
UART_CHIP CHIPMAC 1,9,35,35,11,14,2,CNAMEU7,0,32,2,1 ; UART
;SRAM1 CHIPMAC 0,50,210,13,33,4,4,CNAMEJ4,1,2,2,1 ; SCRATCH PAD
;SRAM2 CHIPMAC 1,67,210,13,33,4,4,CNAMEJ5,1,2,2,1 ; SCRATCH PAD
;SRAM3 CHIPMAC 2,84,210,13,33,4,4,CNAMEJ6,1,2,2,1 ; SCRATCH PAD
;SRAM4 CHIPMAC 3,101,210,13,33,4,4,CNAMEJ7,1,2,2,1 ; SCRATCH PAD
; XUNIT SRAM
SRAM1 CHIPMAC 0,218,21,30,11,8,2,CNAMEU6, 0,28,2,1 ; SCRATCH PAD
SRAM2 CHIPMAC 1,218,34,30,11,5,2,CNAMEU11,0,28,2,1 ; SCRATCH PAD
SRAM3 CHIPMAC 2,218,47,30,11,4,2,CNAMEU18,0,28,2,1 ; SCRATCH PAD
SRAM4 CHIPMAC 3,218,60,30,11,4,2,CNAMEU25,0,28,2,1 ; SCRATCH PAD
.LONG 0
VRAMTAB .LONG CRAM1,CRAM2
.LONG VRAM1,VRAM2,VRAM3,VRAM4,VRAM5,VRAM6
.LONG VRAM7,VRAM8
.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
;CNAMEA8
; .STRING "UA8",0
; .EVEN
CNAMEU67
.STRING "U67",0
.EVEN
;CNAMEA11
; .STRING "UA11",0
; .EVEN
;CNAMEA12
; .STRING "UA12",0
; .EVEN
;CNAMEA13
; .STRING "UA13",0
; .EVEN
;CNAMEA14
; .STRING "UA14",0
; .EVEN
CNAMEU99
.STRING "U99",0
.EVEN
CNAMEU96
.STRING "U96",0
.EVEN
CNAMEU87
.STRING "U87",0
.EVEN
CNAMEU79
.STRING "U79",0
.EVEN
CNAMEU69
.STRING "U69",0
.EVEN
CNAMEU62
.STRING "U62",0
.EVEN
CNAMEU48
.STRING "U48",0
.EVEN
CNAMEU38
.STRING "U38",0
.EVEN
;CNAMEC8
; .STRING "UC8",0
; .EVEN
CNAMEU77
.STRING "U77",0
.EVEN
;CNAMEB11
; .STRING "UB11",0
; .EVEN
;CNAMEB12
; .STRING "UB12",0
; .EVEN
;CNAMEB13
; .STRING "UB13",0
; .EVEN
;CNAMEB14
; .STRING "UB14",0
; .EVEN
;CNAMEB21
; .STRING "UB21",0
; .EVEN
CNAMEU19
.STRING "U19",0
.EVEN
CNAME49
.STRING "U15",0
.EVEN
;CNAMEJ4
; .STRING "UJ4",0
; .EVEN
;CNAMEJ5
; .STRING "UJ5",0
; .EVEN
;CNAMEJ6
; .STRING "UJ6",0
; .EVEN
;CNAMEJ7
; .STRING "UJ7",0
; .EVEN
CNAMEU6
.STRING "U6",0
.EVEN
CNAMEU11
.STRING "U11",0
.EVEN
CNAMEU18
.STRING "U18",0
.EVEN
CNAMEU25
.STRING "U25",0
.EVEN
;CNAMEG12
; .STRING "UG12",0
; .EVEN
CNAMEG14
.STRING "UG14",0
.EVEN
CNAMEG16
.STRING "UG16",0
.EVEN
CNAMEG17
.STRING "UG17",0
.EVEN
CNAMEG18
.STRING "UG18",0
.EVEN
CNAMEG19
.STRING "UG19",0
.EVEN
CNAMEG20
.STRING "UG20",0
.EVEN
CNAMEG22
.STRING "UG22",0
.EVEN
CNAMEG23
.STRING "UG23",0
.EVEN
;CNAMEE13
; .STRING "UE13",0
; .EVEN
CNAMEU76
.STRING "U76",0
.EVEN
;CNAMEJ12
; .STRING "UJ12",0
; .EVEN
;CNAMEJ14
; .STRING "UJ14",0
; .EVEN
;CNAMEJ16
; .STRING "UJ16",0
; .EVEN
;CNAMEJ17
; .STRING "UJ17",0
; .EVEN
;CNAMEJ18
; .STRING "UJ18",0
; .EVEN
;CNAMEJ19
; .STRING "UJ19",0
; .EVEN
;CNAMEJ20
; .STRING "UJ20",0
; .EVEN
;CNAMEJ22
; .STRING "UJ22",0
; .EVEN
;CNAMEJ23
; .STRING "UJ23",0
; .EVEN
; IROM CHIP NAMES
CNAMEU120
.STRING "U120",0
.EVEN
CNAMEU121
.STRING "U121",0
.EVEN
CNAMEU122
.STRING "U122",0
.EVEN
CNAMEU123
.STRING "U123",0
.EVEN
CNAMEU110
.STRING "U110",0
.EVEN
CNAMEU111
.STRING "U111",0
.EVEN
CNAMEU112
.STRING "U112",0
.EVEN
CNAMEU113
.STRING "U113",0
.EVEN
CNAMEU101
.STRING "U101",0
.EVEN
CNAMEU102
.STRING "U102",0
.EVEN
CNAMEU103
.STRING "U103",0
.EVEN
CNAMEU104
.STRING "U104",0
.EVEN
CNAMEU91
.STRING "U91",0
.EVEN
CNAMEU92
.STRING "U92",0
.EVEN
CNAMEU93
.STRING "U93",0
.EVEN
CNAMEU94
.STRING "U94",0
.EVEN
CNAMEU81
.STRING "U81",0
.EVEN
CNAMEU82
.STRING "U82",0
.EVEN
CNAMEU83
.STRING "U83",0
.EVEN
CNAMEU84
.STRING "U84",0
.EVEN
CNAMEU71
.STRING "U71",0
.EVEN
CNAMEU72
.STRING "U72",0
.EVEN
CNAMEU73
.STRING "U73",0
.EVEN
CNAMEU74
.STRING "U74",0
.EVEN
CNAMEU63
.STRING "U63",0
.EVEN
CNAMEU64
.STRING "U64",0
.EVEN
CNAMEU65
.STRING "U65",0
.EVEN
CNAMEU66
.STRING "U66",0
.EVEN
; PROGRAM ROM NAMES
CNAMEU51
.STRING "U51",0
.EVEN
CNAMEU52
.STRING "U52",0
.EVEN
CNAMEU53
.STRING "U53",0
.EVEN
CNAMEU54
.STRING "U54",0
.EVEN
CNAME115
.STRING "U115",0
.EVEN
CNAMEU444
.STRING "U444",0
.EVEN
CNAMEU7
.STRING "U7",0
.EVEN
**************************************************************************
* *
* RAM CHIP DATA *
* *
**************************************************************************
;
; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE
;
VRAMCHIPS:
; COLOR RAMS
; RAM_CHIP 0,0, 8, 16, 1800000H, 187FFF0H ; UA8 ( 0 - 3 )
; RAM_CHIP 0,1, 8, 16, 1800008H, 187FFF8H ; UC8 ( 8 - 11 )
; COLOR RAMS - XUNIT
RAM_CHIP 0,0, 8 , 32, 0A0800000H, 0A08FFFE0H ; UA8 ( 0 - 3 )
RAM_CHIP 0,1, 16, 32, 0A0800000H, 0A08FFFE0H ; UC8 ( 8 - 11 )
; VIDEO RAMS
; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR
RAM_CHIP 0, 2, 8, 32, 0000018H, 03FFFF8H ; UB11 ( 24 - 27 )
RAM_CHIP 0, 3, 8, 32, 0000010H, 03FFFF0H ; UB13 ( 16 - 19 )
RAM_CHIP 0, 4, 8, 32, 0000008H, 03FFFE8H ; UB12 ( 8 - 11 )
RAM_CHIP 0, 5, 8, 32, 0000000H, 03FFFE0H ; UB14 ( 0 - 3 )
PALCHIPS:
; VIDEO PALETTE RAMS
; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR
RAM_CHIP 0, 6, 8, 32, 0800018H, 0BFFFF8H ; UA11 ( 24 - 27 )
RAM_CHIP 0, 8, 8, 32, 0800010H, 0BFFFF0H ; UA13 ( 16 - 19 )
RAM_CHIP 0, 7, 8, 32, 0800008H, 0BFFFE8H ; UA12 ( 8 - 11 )
RAM_CHIP 0, 9, 8, 32, 0800000H, 0BFFFE0H ; UA14 ( 0 - 3 )
.LONG 0
; SCRATCH RAMS
SRAMCHECK
.STRING "CHECKING SCRATCH RAMS",0
.EVEN
SRAMCHIPS ; ???XUNIT??? needs to change
; RAM_CHIP SRAM4,3, 4, 16, 1000004H, 13FFFF4H ; UJ7 ( 4 - 7 )
; RAM_CHIP SRAM3,2, 4, 16, 1000000H, 13FFFF0H ; UJ6 ( 0 - 3 )
; RAM_CHIP SRAM2,1, 4, 16, 1000008H, 13FFFF8H ; UJ5 ( 8 - 11 )
; RAM_CHIP SRAM1,0, 4, 16, 100000CH, 13FFFFCH ; UJ4 ( 12 - 15 )
; SRAM - XUNIT
RAM_CHIP SRAM2,1, 16, 32, 20000010H, 207FFFF0H ; U11 (16 - 31)
RAM_CHIP SRAM4,3, 16, 32, 20000000H, 207FFFE0H ; U25 (0 - 15)
RAM_CHIP SRAM1,0, 16, 32, 20800010H, 20FFFFF0H ; U6 (16 - 31)
RAM_CHIP SRAM3,2, 16, 32, 20800000H, 20FFFFE0H ; U18 (0 - 15)
.LONG 0
;PROMCHIPS ; ???XUNIT??? needs to change
; ROM_CHIP PROM1,0,0,16, 0FF800000H, 0FFFFFFF0H, 0FFFFH ; UJ12
; ROM_CHIP PROM2,1,0,16, 0FF800008H, 0FFFFFFF8H, 0FFFFH ; UG12
; PROM CHIPS FOR XUNIT
PROMBANKS
ROMBANK PROM1, PROM2, PROM3, PROM4, 0ff000000h,000000000h,0ffffh,0ffffh,0ffffh,0ffffh
; ROMBANK PROM1, PROM2, PROM3, PROM4, 0ff800000h,0fffffb80h,0ffffh,0ffffh,0ffffh,0ffffh
.LONG 0
.SECT "CKSUMS"
PROG_CKSUM0 .EQU 0FFFFH ;Checksum for the FF.00 bank
PROG_CKSUM1 .EQU 0FFFFH ;Checksum for the FF.01 bank
PROG_CKSUM2 .EQU 0FFFFH ;Checksum for the FF.02 bank
PROG_CKSUM3 .EQU 0FFFFH ;Checksum for the FF.03 bank
CHECKSUM0
.WORD PROG_CKSUM0 ;U51 CHECKSUM
CHECKSUM1
.WORD PROG_CKSUM1 ;U52 CHECKSUM
CHECKSUM2
.WORD PROG_CKSUM2 ;U53 CHECKSUM
CHECKSUM3
.WORD PROG_CKSUM3 ;U54 CHECKSUM
* CHECKSUM PATCHES
.WORD ~PROG_CKSUM0 ;1'S COMPLEMENT OF THE U51 CHECKSUM
.WORD ~PROG_CKSUM1 ;1'S COMPLEMENT OF THE U52 CHECKSUM
.WORD ~PROG_CKSUM2 ;1'S COMPLEMENT OF THE U53 CHECKSUM
.WORD ~PROG_CKSUM3 ;1'S COMPLEMENT OF THE U54 CHECKSUM
; .TEXT
.sect "COLDSTRT"
**************************************************************************
* *
* IMAGE ROM CHECKSUM TABLES *
* *
* NOTE: COMMENT OUT ANY UNSTUFFED PARTS THAT *
* EXIST BEFORE THE .LONG 0 TERMINATOR! *
* *
**************************************************************************
; ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM
;IROMCHIPS
; .EVEN
; ROM_CHIP IROM1, 1, 8,32, 2000000H, 2FFFFE0H, 0FFFFH ; UG14
; ROM_CHIP IROM9, 9, 8,32, 2000008H, 2FFFFE8H, 0FFFFH ; UJ14
; ROM_CHIP IROM5, 5, 8,32, 2000010H, 2FFFFF0H, 0FFFFH ; UG19
; ROM_CHIP IROM13,13, 8,32, 2000018H, 2FFFFF8H, 0FFFFH ; UJ19
;
; ROM_CHIP IROM2, 2, 8,32, 3000000H, 3FFFFE0H, 0FFFFH ; UG16
; ROM_CHIP IROM10,10, 8,32, 3000008H, 3FFFFE8H, 0FFFFH ; UJ16
; ROM_CHIP IROM6, 6, 8,32, 3000010H, 3FFFFF0H, 0FFFFH ; UG20
; ROM_CHIP IROM14,14, 8,32, 3000018H, 3FFFFF8H, 0FFFFH ; UJ20
;
; ROM_CHIP IROM3, 3, 8,32, 4000000H, 4FFFFE0H, 0FFFFH ; UG17
; ROM_CHIP IROM11,11, 8,32, 4000008H, 4FFFFE8H, 0FFFFH ; UJ17
; ROM_CHIP IROM7, 7, 8,32, 4000010H, 4FFFFF0H, 0FFFFH ; UG22
; ROM_CHIP IROM15,15, 8,32, 4000018H, 4FFFFF8H, 0FFFFH ; UJ22
;
; ROM_CHIP IROM4, 4, 8,32, 5000000H, 5FFFFE0H, 0FFFFH ; UG18
; ROM_CHIP IROM12,12, 8,32, 5000008H, 5FFFFE8H, 0FFFFH ; UJ18
; ROM_CHIP IROM8, 8, 8,32, 5000010H, 5FFFFF0H, 0FFFFH ; UG23
; ROM_CHIP IROM16,16, 8,32, 5000018H, 5FFFFF8H, 0FFFFH ; UJ23
;
; .LONG 0 ; FORCE IT TO STOP HERE
; IROMS - XUNIT
IROMBANKS
.even
ROMBANK IROM1, IROM2, IROM3, IROM4, 0f8000000h,0f9000000h,04586h,062f4h,0c85eh,00f4fh
ROMBANK IROM5, IROM6, IROM7, IROM8, 0f9000000h,0fa000000h,0c5d7h,0b2a2h,0707ch,02dc2h
ROMBANK IROM9, IROM10,IROM11,IROM12,0fa000000h,0fb000000h,0033eh,0b3e8h,0e220h,0139dh
ROMBANK IROM13,IROM14,IROM15,IROM16,0fb000000h,0fc000000h,01ec9h,04f74h,02ea6h,040d0h
ROMBANK IROM17,IROM18,IROM19,IROM20,0fc000000h,0fd000000h,01a76h,0bab6h,0c1c1h,06a71h
ROMBANK IROM21,IROM22,IROM23,IROM24,0fd000000h,0fe000000h,0e25ch,0fbd9h,074fbh,07cc3h
ROMBANK IROM25,IROM26,IROM27,IROM28,0fe000000h,0ff000000h,09aa9h,0ea50h,0598ah,05444h
.long 0
IROMCHIPS
.EVEN
; ROM_CHIP IROM1, 1, 8,32, 0F8000000H, 0F8FFFFE0H, 05773H ; U120
; ROM_CHIP IROM2, 2, 8,32, 0F8000008H, 0F8FFFFE8H, 05880H ; U121
; ROM_CHIP IROM3, 3, 8,32, 0F8000010H, 0F8FFFFF0H, 092C8H ; U122
; ROM_CHIP IROM4, 4, 8,32, 0F8000018H, 0F8FFFFF8H, 07D46H ; U123
;
; ROM_CHIP IROM5, 5, 8,32, 0F9000000H, 0F9FFFFE0H, 056DFH ; U110
; ROM_CHIP IROM6, 6, 8,32, 0F9000008H, 0F9FFFFE8H, 0FFF6H ; U111
; ROM_CHIP IROM7, 7, 8,32, 0F9000010H, 0F9FFFFF0H, 075DFH ; U112
; ROM_CHIP IROM8, 8, 8,32, 0F9000018H, 0F9FFFFF8H, 0E43BH ; U113
;
; ROM_CHIP IROM9, 9, 8,32, 0FA000000H, 0FAFFFFE0H, 0929FH ; U101
; ROM_CHIP IROM10,10, 8,32, 0FA000008H, 0FAFFFFE8H, 07629H ; U102
; ROM_CHIP IROM11,11, 8,32, 0FA000010H, 0FAFFFFF0H, 04753H ; U103
; ROM_CHIP IROM12,12, 8,32, 0FA000018H, 0FAFFFFF8H, 07801H ; U104
;
; ROM_CHIP IROM13,13, 8,32, 0FB000000H, 0FBFFFFE0H, 0CBBDH ; U91
; ROM_CHIP IROM14,14, 8,32, 0FB000008H, 0FBFFFFE8H, 0DAF4H ; U92
; ROM_CHIP IROM15,15, 8,32, 0FB000010H, 0FBFFFFF0H, 0E5E1H ; U93
; ROM_CHIP IROM16,16, 8,32, 0FB000018H, 0FBFFFFF8H, 0BDA4H ; U94
;
; ROM_CHIP IROM17,17, 8,32, 0FC000000H, 0FCFFFFE0H, 0EE88H ; U81
; ROM_CHIP IROM18,18, 8,32, 0FC000008H, 0FCFFFFE8H, 07E7EH ; U82
; ROM_CHIP IROM19,19, 8,32, 0FC000010H, 0FCFFFFF0H, 01B8CH ; U83
; ROM_CHIP IROM20,20, 8,32, 0FC000018H, 0FCFFFFF8H, 0D46FH ; U84
;
; ROM_CHIP IROM21,21, 8,32, 0FD000000H, 0FDFFFFE0H, 0A34BH ; U71
; ROM_CHIP IROM22,22, 8,32, 0FD000008H, 0FDFFFFE8H, 06ABEH ; U72
; ROM_CHIP IROM23,23, 8,32, 0FD000010H, 0FDFFFFF0H, 0DDFEH ; U73
; ROM_CHIP IROM24,24, 8,32, 0FD000018H, 0FDFFFFF8H, 0249AH ; U74
;
; ROM_CHIP IROM25,25, 8,32, 0FE000000H, 0FEFFFFE0H, 0C1B3H ; U63
; ROM_CHIP IROM26,26, 8,32, 0FE000008H, 0FEFFFFE8H, 0FAA6H ; U64
; ROM_CHIP IROM27,27, 8,32, 0FE000010H, 0FEFFFFF0H, 0B509H ; U65
; ROM_CHIP IROM28,28, 8,32, 0FE000018H, 0FEFFFFF8H, 0D467H ; U66
.LONG 0 ; FORCE IT TO STOP HERE
.END