************************************************************** * * Software: JAMIE BEGELMAN, KURT MAHAN, EUGENE P. JARVIS * Initiated: ? * * Modified: Shawn Liptak, 11/14/91 -Total carnage clean up * Shawn Liptak, 1/20/92 -DIP switch test * Shawn Liptak, 1/24/92 -Added line_draw * Shawn Liptak, 2/20/92 -Basketball cleanup * GEORGE PETRO, 1/17/93 -NBA JAM * * COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. * *.Last mod - 3/24/93 16:48 ************************************************************** .width 132 .option b,d,l,t .mnolist .include "gsp.equ" .include "sys.equ" .include mproc.equ .include link.equ .include imgtbl.glo .include "macros.h" .INCLUDE GAME.EQU .INCLUDE DIP.EQU ;from DCSSOUND.ASM .ref SNDSND .ref _tseconds .ref _switch_map_mode .ref _coin_addr .ref _switch_addr .ref _switch2_addr .ref _watchdog_addr .ref _dipswitch_addr .ref _sound_addr .ref _soundirq_addr .ref _coin_counter_addr .ref InitAddresses .ref dec_to_asc .ref copy_string,copy_rom_string .ref concat_string .ref message_buffer .ref SOUNDSUP .ref _rtc_seconds .ref _rtc_minutes .ref _rtc_hours .ref _rtc_day .ref _rtc_date .ref _rtc_month .ref _rtc_year .ref _year .ref _month .ref _day .ref _serial_number .ref _man_date .globl _get_time .globl _set_time .globl _aquire_time .globl SNDPROTOPROMPT .globl SNDRELEASEPROMPT .globl SNDTIMEOUT SCRXFUDGE equ 56 ************************************************************************** * * * DEFS AND REFS * * * ************************************************************************** .ref fudge_switches, fudge_switches_diag, CPU_RET .REF SNDSND,INTIO,WARMSET,GET_AUD,STORE_AUDIT,WDOGDIS .ref AUD1, GAMSTATE, KILL_AUD, PCMOSRET .ref CLR_AUD, FAC_SET, CMOS_VAL, ROM_NAME .DEF POWERTST, DIAGCPUTEST, POWERCMOS .def SWITCHTEST, SWSET1, SWSET2 .DEF CROSS_H,COL_BARS,BURN_IN,STRNEW1 .DEF CIRCLE,HVLINE,STRING,RECTANGLE,POINT,DSCRCLR,INITCOLR .DEF READ_DIP .REF SNDTST .REF SYSCOPY *SYMBOLS IN MENU.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 DIPCOINTAB .REF GET_ADJ, GET_CSPT, NO_CREDS .REF PUT_ADJ, CRED_P, HEXTOASC, F_ADC_S, SET_COIN_ADJ .REF init_all, mainlp, DIAG_COLORS * *DIAGNOSTIC SOUND EQUATES * CMOS_ERROR_SND .EQU 0203h CPU_ERROR_SND .EQU 0203h DIP_SND .EQU 0c8h SWITCH_SND .EQU 0c8h .BSS SWSET1,32 ; FOR SWITCH TEST .BSS SWSET2,32 .BSS DIPVAL,16 .BSS DIP1ST,16 .BSS FORCEDIP,16 ; FOR FORCING THE USE OF THE DIP .BSS CERRORS,32 .BSS CPASSES,32 .BSS SCHANGE,16 .bss _snd_status,32 .bss _b6_save,32 ; Temporary register fer me .bss _temporary,32 ; Another temp fer me .bss _snd_diag_code,16 ; Temporary storage for sound diag code BSSX _snd_chip_count,16 ; Temporary register fer me .bss _pic_raw,128 ; Stuff fer the PIC .bss _pic_temp,64 ************************************************************************** * * * USEFUL MACROS * * * ************************************************************************** * * TIMED PAUSE * PAUSE .macro TIME, REG MOVI :TIME:,:REG:,L LABEL? NOP DSJS :REG:,LABEL? .endm *BIT SET * BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN * NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY BSET .macro P1,R1 MOVK 1,A14 SLL :P1:,A14 OR A14,:R1: .endm * *RJST - RIGHT JUSTIFIES BITS IN A LONG WORD, I.E. RIGHTMOST BIT * TO BIT POSITION 0 * RJST REG RJST .macro REG MOVE :REG:,:REG: JRZ MX? MLP? SRL 1,:REG: JRNC MLP? SLL 1,:REG: ADDK 1,:REG: MX? .endm 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 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 RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE ZERO_EXTEND EQU 1Fh ; PARAMETERS SIGN_EXTEND EQU 20h PAL_SELECT EQU 0FFDCH ; ENABLE VIDEO PALETTE MAP ACCESS .text .even ************************************************************************** * * * POWERTST * * * * POWERUP SELF TEST ROUTINES * * * * ENTRY * * NOTHING * * * * EXIT * * NOTHING * * * ************************************************************************** POWERTST dint setf 16,1,0 setf 32,0,1 MOVI STCKST,SP,L move @_watchdog_addr,a0,L move a0,*a0 ; HALT DMA AND ENABLE CACHE clr a14 move a14,@DMACTRL move a14,@DMACTRL FCALL INTIO,B6 ; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED MOVI SYSCINIT,A13 MOVE A13,@SYSCTRL FCALL CPUTEST,SP JAUC WARMSET **************************************************************************** * * * PIC SECURITY STUFF * * * * Security source for WWF-UNIT's PIC * * * * Version 1.00 * * Written by: Michael J. Lynch * * Copyright (c) 1995 by Williams Electronics Games Inc. * * All rights reserved * * * * TTTTT OOO PPPP SSS EEEEE CCC RRRR EEEEE TTTTT * * T O O P P S S E C C R R E T * * T O O P P S E C R R E T * * T O O PPPP SSS EEEE C RRRR EEEE T * * T O O P S E C R R E T * * T O O P S S E C C R R E T * * T OOO P SSS EEEEE CCC R R EEEEE T * * * * * * Company Confidential Information * * NEED TO KNOW BASIS ONLY * * * * USE OR DISCLOSURE STRICTLY PROHIBITED UNLESS APPROVED IN WRITING FROM * * WILLIAMS ELECTRONICS GAMES INC. * * * * Unapproved use or disclosure will result in severe torture!!!!! * * * **************************************************************************** ; _pic_bin2bcd Converts a hex number in a7 to BCD and puts it in A3 _pic_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 FRET b6 ****************************************************************************** * * * _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_data: setf 8,0 setf 32,0,1 movk 16,a9 ; Number of bytes of data to read movi _pic_raw,a1 ; address at which to store raw data from PIC movk 010h,a8 ; Send Request Serial Number Data Command move a8,@PIC_COMMAND _rp_data_loop: setf 16,0 clr a8 move a8,@PIC_COMMAND 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 @_watchdog_addr,a8,L move a8,*a8 move @_soundirq_addr,a8,L move *a8,a8 subi 1,a2 btst 12,a8 ; Data available ? jrnz _rp_ack_loop ; NO setf 8,0 ; YES move @PIC_DATA,a0 ; read data move a0,*a1+ ; write to temp holding area movk 010h,a8 ; Acknowledge reciept of data setf 16,0 move a8,@PIC_COMMAND movi 1000000,a2 ; Wait for PIC n acknowlegde _rp_nack_loop: move a2,a2 jrz gn_bad move @_watchdog_addr,a8,L move a8,*a8 move @_soundirq_addr,a8,L move *a8,a8 subi 1,a2 btst 12,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 _pic_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 _pic_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 _pic_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 move *a10,a1 sll 8,a1 srl 8,a0 andi 0ffh,a0 andi 0ff00h,a1 or a1,a0 move a0,@_man_date,L 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 (a2 = serial # hex) move a2,@_serial_number,L 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 cmpi 528,a2 ; Development PIC Game Number jrz gn_good cmpi 430,a2 ; Real Game Number (WrestleMania) jrz gn_good gn_bad: movi SEC_MESS_2,a0 ; Level 2 Security Check failure FCALL STRINGCENTER,b6 addi [220,0],a1 clr a2 movi COLOR_RED,a3 FCALL STRING,b6 LOCKUP gn_good: setf 8,0 ; Stomp on memory used to decode PIC clr a0 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 setf 16,1,0 ;Field0 = Word sign extend setf 32,0,1 ;Field1 = Long word rets ************************************************************************** * * * POWERCMOS * * * * CHECK THE CMOS AND DO A LOT OF OTHER STUFF -- SHOW THE * * POWER UP MESSAGES * * * * ENTRY NOTHING * * EXIT NOTHING * * * ************************************************************************** POWERCMOS: DINT MOVI SYSCINIT,A1 MOVE A1,@SYSCTRL,W CALLA WDOGDIS ; GET RID OF WATCH DOG CLR A13 ; USED TO DECIDE WHETHER PAUSE OR NOT MOVE A13,@DMACTRL,W MOVE A13,@DMACTRL,W FCALL INITCOLR,B5 ; FIX UP THE COLORS FCALL INTIO,B6 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 callr _read_pic_data movi 05018h,a13 ; Palette 128 match color (BLACK) move a13,@VMUX_BREG1,W movi 08080h,a13 ; Set Palette # to 128 move a13,@DMACMAP,W movi SEC_MESS_1,a0 ; Print the message (won't show up) FCALL STRINGCENTER,b6 ; Note - only shows up on pirate addi [210,0],a1 ; hardware clr a2 movi COLOR_RED,a3 FCALL STRING,b6 clr a13 ; Set palette # back to 0 move a13,@DMACMAP,W movi SNDREVPROMPT,a0 ; Sound Revision Prompt FCALL STRINGCENTER,b6 addi [120,0],a1 clr a2 movi COLOR_PURPLE,a3 FCALL STRING,b6 move @_watchdog_addr,a0,L move a0,*a0,W move @_coin_counter_addr,a0,L movi 030h,a1 ; Yank down the reset move a1,*a0,W movi 10000,a1 ; Hold it fer a while dsjs a1,$ movi 020h,a1 ; Let it go move a1,*a0,W movi 10000,a1 dsjs a1,$ move @_sound_addr,a0,L ; Bypass the diags movb a0,*a0 move @_watchdog_addr,a0,L ; Kill the dog move a0,*a0,W movi 500000,a1 ; Wait fer a while _swait_lp move @_watchdog_addr,a0,L move *a0,a0,W dsjs a1,_swait_lp clr a3 ; Turn on the sounds move a3,@SOUNDSUP,W movi 999,a3 ; Send revision request sound call calla SNDSND movi 1000000,a2 _sndrev_loop move @_watchdog_addr,a0,L movb a0,*a0 move @_soundirq_addr,a0,L ; Wait fer a response move *a0,a1,W btst B_SDAV,a1 ; Got a response ? jrz _snd_response ; BR = yes dsjs a2,_sndrev_loop _snd_timeout movi SNDTIMEOUT,a0 ; If we get here we never got a response FCALL STRINGCENTER,b6 ; Tell operator about it addi [135,0],a1 clr a2 movi COLOR_RED,a3 FCALL STRING,b6 jruc _sndrev_done ; Then we be done _snd_response move @_sound_addr,a0,L ; Get sound revision data move *a0,a0,W move a0,@_snd_chip_count,W ; Put up sound revision move a0,a1 andi 0ffh,a1 cmpi 0ffh,a1 jrz _snd_timeout andi 0f0h,a1 cmpi 0d0h,a1 jrz _proto_version movi SNDRELEASEPROMPT,a4 jruc _do_snd_version _proto_version movi SNDPROTOPROMPT,a4 _do_snd_version calla copy_rom_string move @_snd_chip_count,a0,W andi 0fh,a0 movk 15,a1 calla dec_to_asc calla concat_string movi message_buffer,a0 FCALL STRINGCENTER,b6 addi [135,0],a1 clr a2 movi COLOR_WHITE,a3 FCALL STRING,b6 _sndrev_done movi GAMESNPROMPT,a0 ; Put up Game Serial number FCALL STRINGCENTER,b6 addi [160,0],a1 clr a2 movi COLOR_PURPLE,a3 FCALL STRING,b6 move @_serial_number,a0,L ; Serial number put here by _get_serial_number movi 1000000,a1 calla dec_to_asc calla copy_string movi message_buffer,a0 FCALL STRINGCENTER,b6 addi [175,0],a1 clr a2 movi COLOR_WHITE,a3 FCALL STRING,b6 CALLA CMOS_VAL ; CHECKSUM AUDITS/ADJUSTMENTS JREQ CMOSOK * * BAD CHECKSUM ON POWERUP ----> FACTORY SET * ; CALLA RES_ALL ;ALL TIME TABLE clr a0 ;Full CALLA FAC_SET CALLA CLR_AUD MOVK 1,A13 ; FLAG ERROR CALLA CMOS_VAL ; TRY AGAIN JREQ CMOSB1 ; BR = OK WE'RE IN 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 CALLA CRED_P ;CHECK OUT CREDITS, THIS WILL CLEAR ;IF NECESSARY. THANX LINKY! CALLR READ_DIP ANDI DPUSECMOS,A0 JRNZ CMOS3 ; BR = USING CMOS COINAGE MOVI CMOS_DIP,A0 FCALL STRINGCENTER,B6 ADDI [75,0],A1 CLR A2 MOVI COLOR_WHITE,A3 FCALL STRING,B6 CALLR SET_DIP_COINAGE JRUC CMOS4 CMOS3 ; ; USING CMOS HERE ; MOVI CMOS_CMOS,A0 FCALL STRINGCENTER,B6 ADDI [75,0],A1 CLR A2 MOVI COLOR_WHITE,A3 FCALL STRING,B6 CMOS4 move @_coin_addr,a0,L move *a0,a0,W not a0 andi 8h,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 @_sound_addr,a13,L move a0,*a13,W MOVI CMOS_WAIT,A0 FCALL STRINGCENTER,B6 ADDI [230,0],A1 CLR A2 MOVI COLOR_RED,A3 FCALL STRING,B6 CALLA WDOGDIS ; DISABLE WOOF WOOF CALLA fudge_switches ;get fudged switches in a0 andi BUTTONS|START_BITS,a0 MOVE A0,@SWSET1,L CTMP1 move @_watchdog_addr,a0,L move a0,*a0 CALLA fudge_switches ;get fudged switches in a0 andi BUTTONS|START_BITS,a0 MOVE @SWSET1,A1,L CMP A0,A1 JRZ CTMP1 JRUC CTMP2 CTMP0 MOVI 200H,A0 CTMP_WAIT move @_watchdog_addr,a1,L move a1,*a1 ;FIX - Temp!!!!! ;FIX - Speed up warm reset - Replace when we ship! ; .if DEBUG ; .else PAUSE 1000H,B6 PAUSE 2000h,B6 ;Go fast DSJS A0,CTMP_WAIT ; .endif CTMP2 move @_serial_number,b5,L move @_man_date,b6,L JAUC PCMOSRET SNDREVPROMPT .string "SOUND SYSTEM VERSION",0 .even SNDPROTOPROMPT .string "PROTO ",0 .even SNDRELEASEPROMPT .string "RELEASE ",0 .even SNDTIMEOUT .string "TIMEOUT ON RESPONSE FROM SOUND SECTION",0 .even GAMESNPROMPT .string "GAME SERIAL NUMBER",0 .even 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_WAIT .STRING "ERRORS DETECTED -- ANY BUTTON TO CONTINUE",0 .EVEN CMOS_FACRES .STRING "CMOS INVALID -- FACTORY SETTINGS RESTORED",0 .EVEN CMOS_BAD .string "CMOS CHIP U62 BAD",0 .EVEN CMOS_UNFAC .STRING "UNABLE TO RESTORE FACTORY SETTINGS",0 .EVEN CMOS_OK .STRING "CMOS OK",0 .EVEN ************************************************************************** * * * BURNIN * * * * FACTORY BURNIN TEST -- EXITS BY RESETING THE GAME * * * * ENTRY * * NOTHING * * * * EXIT * * NOTHING * * * * CALL * * JAUC * * * ************************************************************************** BURN_IN: DINT MOVI AUDAUTO,A0 ;ZERO OUT BURNIN AUDIT CALLA KILL_AUD BURNLOOP CALLA WDOGDIS ;MAKE SURE THE DOG IS ASLEEP FCALL CPUTEST,SP BURNSP: setf 16,1,0 setf 32,0,1 MOVI STCKST,SP,L ;RESTORE THE STACK PTR MOVI SYSCINIT,A0 ;RE-INITIALIZE SYSTEM CONTROL MOVE A0,@SYSCTRL,W MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM 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: CALLA WDOGDIS DINT calla InitAddresses ; Make sure I/O addresses are initialized FCALL CPUTEST,SP DIAGSP: SETF 16,1,0 ; WORD NO SIGN EXTEND SETF 32,0,1 ; LONG WORD MOVI STCKST,SP,L CALLA init_all callr _read_pic_data CALLA DIAG_COLORS ;FIRE UP THE COLORS CREATE DIAG_PID,CPU_RET MOVI INDIAG,A0 MOVE A0,@GAMSTATE,W movk 1,a0 ; Menu driver switch mapping mode move a0,@_switch_map_mode,L calla InitAddresses JAUC mainlp **************************************** * bin2bcd - Converts binary number pointed to by a0 to bcd and stores it back * into area pointed to by a0. * SUBR bin2bcd mmtm sp,a0,a1,a2,a3 move *a0,a2,W move a2,a1 movi 10,a3 divu a3,a1 sll 4,a1 movi 10,a3 modu a3,a2 or a2,a1 move a1,*a0,W mmfm sp,a0,a1,a2,a3 rets ********************************************************* * _set_time - Sets the real time clock based on values in * _rtc_seconds * _rtc_minutes * _rtc_hours * _rtc_day * _rtc_date * _rtc_month * _rtc_year * Time is set through the PIC. SUBR _set_time mmtm sp,a0,a1,a2,a3,a4 movi _rtc_seconds,a0,L movi 7,a4 _st_cnvt_loop callr bin2bcd addk 16,a0 dsjs a4,_st_cnvt_loop movi 14,a4 movi _rtc_seconds,a3,L pushst dint movi 012h,a0 move a0,@PIC_COMMAND,W _st_next_val movk 2,a0 move a0,@PIC_COMMAND,W movi 1000000,a1 _st_ack_wait move @_watchdog_addr,a2,L move a2,*a2,W move @_soundirq_addr,a2,L move *a2,a2,W btst 12,a2 jrz _got_st_ack dsjs a1,_st_ack_wait jruc _st_done _got_st_ack pushst setf 4,0 move *a3,a1,0 popst move a1,@PIC_COMMAND,W ori 010h,a1 move a1,@PIC_COMMAND,W addk 4,a3 btst 3,a3 jrz _addr_ok addk 8,a3 _addr_ok movi 1000000,a0 _st_nack_wait move @_watchdog_addr,a2,L move a2,*a2,W move @_soundirq_addr,a2,L move *a2,a2,W btst 12,a2 jrnz _got_st_nack dsjs a0,_st_nack_wait jruc _st_done _got_st_nack dsj a4,_st_next_val _st_done popst mmfm sp,a0,a1,a2,a3,a4 rets ******************************************** * bcd2hex - Converts 2 digit BCD number in a1 to hex and stores back in a1 * SUBR bcd2hex mmtm sp,a0,a3 move a1,a2 movk 10,a3 andi 0f0h,a1 srl 4,a1 mpyu a3,a1 andi 0fh,a2 add a2,a1 mmfm sp,a0,a3 rets *********************************************** * _aquire_time - Time aquisition trigger function called in the DIRQ * Starts the acquisition of time information from the * Real Time Clock (RTC). The time information is transfered * from the RTC to the PIC by the PIC. This is done this way * because the RTC to PIC interface is an I2C bus interface * and requires approximately 3 ms to transfer the data from * the RTC to the PIC. This function is called by the DIRQ * every 27 ticks (495ms) and then on the next DIRQ the function * to transfer the time information from the PIC to this * application is called. This prevents this application from * being bogged down while the time information is being * moved from the RTC to the PIC. SUBR _aquire_time mmtm sp,a0,a1 movi 011h,a0 ;Command code 0x1 move a0,@PIC_COMMAND,W _at_next_byte movi 01h,a0 move a0,@PIC_COMMAND,W movi 100000,a0 ;Wait for Acknowledge _at_ack_wait move @_watchdog_addr,a1,L move a1,*a1,W move @_soundirq_addr,a1,L move *a1,a1,W btst 12,a1 jrz _got_at_ack dsjs a0,_at_ack_wait jruc _at_done _got_at_ack movi 010h,a1 move a1,@PIC_COMMAND,W ;Take away Request _at_done mmfm sp,a0,a1 rets ************************************************* * _get_time - This function transfers the time information that was extracted * from the RTC by the PIC from the PIC to some global memory * area for use by this application. The time information is * stored in hexidecimal word sized global values as follows * * _tseconds (0-59) Current seconds * _tminutes (0-59) Current minutes * _thours (0-23) Current hours * _tday (1-7) Current Day (1=Sunday, 7=Saturday) * _tdate (1-31) Current Date * _tmonth (1-12) Current Month (1=January, 12=December) * _tyear (0-99) Current Last 2 Digits of year SUBR _get_time mmtm sp,a0,a1,a2,a3 movk 8,a3 ;Number of bytes of data to get movi _tseconds,a2 movi 013h,a0 ;Command code 0x3 move a0,@PIC_COMMAND,W _gt_next_byte movi 03h,a0 move a0,@PIC_COMMAND,W movi 100000,a0 ;Wait for Acknowledge _get_time_data_wait move @_watchdog_addr,a1,L move a1,*a1,W move @_soundirq_addr,a1,L move *a1,a1,W btst 12,a1 jrz _got_gt_ack dsjs a0,_get_time_data_wait cmpi 1,a3 jrz _get_time_adjust movk 1,a0 jruc _get_time_done _got_gt_ack move @PIC_DATA,a0,W ;Read the data movi 010h,a1 move a1,@PIC_COMMAND,W ;Tell PIC we took data andi 0ffh,a0 move a0,*a2+,W movi 100000,a0 _gt_wait_nack move @_watchdog_addr,a1,L move a1,*a1,W move @_soundirq_addr,a1,L move *a1,a1,L btst 12,a1 jrnz _got_gt_nack dsjs a0,_gt_wait_nack _got_gt_nack dsj a3,_gt_next_byte _get_time_adjust movi _tseconds,a0,L move *a0,a1,W ;Mask off unused bits for seconds andi 07fh,a1 callr bcd2hex ;Convert to hex move a1,a1 jrnn _chk_seconds59 clr a1 jruc _seconds_ok _chk_seconds59 cmpi 60,a1 jrlt _seconds_ok clr a1 _seconds_ok move a1,*a0+,W move *a0,a1,W ;Mask off unused bits for minutes andi 07fh,a1 callr bcd2hex ;Convert to hex move a1,a1 jrnn _chk_minutes59 clr a1 jruc _minutes_ok _chk_minutes59 cmpi 60,a1 jrlt _minutes_ok clr a1 _minutes_ok move a1,*a0+,W move *a0,a1,W ;Mask off unused bits for hours andi 03fh,a1 callr bcd2hex ;Convert to hex move a1,a1 jrnn _chk_hours23 clr a1 jruc _hours_ok _chk_hours23 cmpi 24,a1 jrlt _hours_ok clr a1 _hours_ok move a1,*a0+,W move *a0,a1,W ;Mask off unused bits for day andi 07h,a1 callr bcd2hex ;Convert to hex move a1,a1 jrnz _chk_day7 movk 1,a1 jruc _day_ok _chk_day7 cmpi 8,a1 jrlt _day_ok movk 1,a1 _day_ok move a1,*a0+,W move *a0,a1,W ;Mask off unused bits for date andi 03fh,a1 callr bcd2hex ;Convert to hex move a1,a1 jrnz _chk_date31 movk 1,a1 jruc _date_ok _chk_date31 cmpi 32,a1 jrlt _date_ok movk 1,a1 _date_ok move a1,*a0+,W move *a0,a1 ;Mask off unused bits for month andi 01fh,a1 callr bcd2hex ;Convert to hex move a1,a1 jrnz _chk_month12 movk 1,a1 jruc _month_ok _chk_month12 cmpi 13,a1 jrlt _month_ok movk 1,a1 _month_ok move a1,*a0+,W move *a0,a1,W callr bcd2hex ;Convert to hex move a1,a1 jrnn _chk_year99 clr a1 jruc _year_ok _chk_year99 cmpi 100,a1 jrlt _year_ok clr a1 _year_ok move a1,*a0,W clr a0 ;All bits used for year _get_time_done mmfm sp,a0,a1,a2,a3 rets *********************************************** * PICCHECK - Power up test for the PIC MicroController * Checks basic communications with the PIC chip * PICCHECK movi 1fh,a0 ;Command code 0xf move a0,@PIC_COMMAND,W movi 0fh,a0 move a0,@PIC_COMMAND,W movi 100000,a0 ;Wait for Acknowledge pic_loop move @_watchdog_addr,a1,L move a1,*a1,W move @_soundirq_addr,a1,L move *a1,a1,W btst 12,a1 jrz _got_pic_ack ;BR = got acknowledge dsjs a0,pic_loop movk 1,a0 jruc _piccheck_done _got_pic_ack move @PIC_DATA,a0,W ;Read the data movi 010h,a1 move a1,@PIC_COMMAND,W ;Tell PIC we took data movi 100000,a1 _pic_nack_loop move @_watchdog_addr,a2,L move a2,*a2,W move @_soundirq_addr,a2,L move *a2,a2,W btst 12,a2 jrnz _got_pic_nack dsjs a1,_pic_nack_loop movk 1,a0 jruc _piccheck_done _got_pic_nack andi 0fh,a0 cmpi 0fh,a0 jrz _pic_ok movk 1,a0 jruc _piccheck_done _pic_ok clr a0 _piccheck_done FRET b5 *************************************************** * SNDCHECK - Sound Subsystem Check during CPUTEST * SNDCHECK move b6,@_b6_save,L move @_coin_counter_addr,a0,L movi 030h,a1 move a1,*a0,W movi 8,a1 dsjs a1,$ movi 020h,a1 move a1,*a0,W movi 1000000,a1 dsp_loop1 move @_watchdog_addr,a0,L move a0,*a0,W move @_soundirq_addr,a0,L move *a0,a2,W btst B_SDAV,a2 jrz dsp_lp1_exit dsjs a1,dsp_loop1 movi DSP,a10 movk 1,a0 move a0,a11 inc a11 FCALL CHIPOUT,b5 movk 1,a0 jruc dspcheck_done dsp_lp1_exit move @_sound_addr,a0,L move *a0,a0,W andi 0ffh,a0 cmpi 079h,a0 jrz dsp_next_byte movi DSP,a10 movk 1,a0 move a0,a11 inc a11 FCALL CHIPOUT,b5 movk 1,a0 jruc dspcheck_done dsp_next_byte movi 10000000,a1 dsp_loop2 move @_watchdog_addr,a0,L move a0,*a0,W move @_soundirq_addr,a0,L move *a0,a2,W btst B_SDAV,a2 jrz dsp_lp2_exit dsjs a1,dsp_loop2 movi DSP,a10 movk 1,a0 move a0,a11 inc a11 FCALL CHIPOUT,b5 movk 1,a0 jruc dspcheck_done dsp_lp2_exit movi DSP,a10 clr a0 move a0,a11 inc a11 FCALL CHIPOUT,b5 move @_sound_addr,a0,L move *a0,a0,W andi 0ffh,a0 move a0,a14 clr a0 move a0,a0 jrz dsp_ok movk 1,a0 jruc dspcheck_done dsp_ok clr a0 move a0,@_snd_status,L subi 2,a14 move a14,@_snd_diag_code,W clr a14 move a14,@_snd_chip_count,W movi SROMTAB,a12,L snd_romok_loop move *a12+,a10,L jrz sndrom_done move @_snd_chip_count,a14,W move @_snd_diag_code,a11,W cmp a11,a14 jrnz sndchip_ok movk 2,a11 move a11,@_snd_status,L jruc snd_chip_out sndchip_ok movk 1,a11 snd_chip_out addk 1,a14 move a14,@_snd_chip_count,W FCALL CHIPOUT,b5 move @_snd_status,a11,L jrz snd_romok_loop movk 1,a0 jruc dspcheck_done sndrom_done movi SNDRAMTAB,a12,L snd_ramok_loop move *a12+,a10,L jrz sndram_done move @_snd_diag_code,a14,W cmpi 8,a14 jrnz sndram_ok movk 2,a11 move a11,@_snd_status,L jruc snd_ram_out sndram_ok movk 1,a11 snd_ram_out FCALL CHIPOUT,b5 move @_snd_status,a11,L jrz snd_ramok_loop movk 1,a0 jruc dspcheck_done sndram_done clr a0 dspcheck_done movi 1000000,a1 dspcheck_wait_exit_loop move @_watchdog_addr,a2,L move a2,*a2,W dsjs a1,dspcheck_wait_exit_loop move @_b6_save,b6,L FRET b6 ************************************************************************** * * * CPUTEST * * * * THE ACTUAL CPU TEST STUFF * * * * ENTRY * * SP RETURN ADDRESS * * * * EXIT * * WHO KNOWS * * * * CALL * * FCALL CPUTEST,SP * * * ************************************************************************** CPUT_X .EQU 180 ;TEXT X POSITION CPUT_Y1 .EQU 118 ;TEXT ROW 1 Y POSITION CPUT_Y2 .EQU 130 ;TEXT ROW 2 Y POSITION CPUT_Y3 .EQU 142 ;TEXT ROW 3 Y POSITION CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+10,389-CPUT_X] CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START CPUTEST: move sp,a1 movi STCKST,sp ; Set up a temporary stack calla InitAddresses ; Reset the I/O Addresses move a1,sp move @_watchdog_addr,a0,L move a0,*a0 FCALL INITCOLR,B5 ;HEY! IT LOOKS BETTER THIS WAY FCALL DSCRCLR,B6 ;BLOW THE SCREEN OR IT LOOKS TOO UGLY CLR B0 .if WWFUNIT movi SYSCINIT,a13 .else MOVI 0FFFCH,A13 .endif MOVE A13,@SYSCTRL,W ;MAKE SURE WE'RE WRITING TO BIT MAP MOVI VRAMCHIPS,A14 ;VERIFY BIT MAP FCALL RAMCHECK,B5 ; ENABLE VIDEO PALETTE MAP ACCESS .if WWFUNIT movi SYSCINIT,a13 andni PALENB,a13 .else MOVI PAL_SELECT,A13 .endif MOVE A13,@SYSCTRL,W MOVI PALCHIPS,A14 ;VERIFY OBJECT PALETTE RAM FCALL RAMCHECK,B5 MOVE B0,A12 ; DISABLE VIDEO PALETTE MAP ACCESS .if WWFUNIT movi SYSCINIT,a13 .else MOVI 0FFFCH,A13 .endif MOVE A13,@SYSCTRL,W 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 move sp,a1 movi STCKST,sp ; Set up a temporary stack calla InitAddresses ; Reset the I/O Addresses move a1,sp 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 MOVI PROMCHIPS,A14 FCALL ROMCHECK,B5 jrnz PROMABORT MOVI IROMCHIPS_8MEG,A14 FCALL ROMCHECK,B5 jrnz PROMABORT movi SYSCINIT,a14 ori 0100h,a14 move a14,@SYSCTRL,W ; Image IROM bank 1 movi IROMCHIPS1_8MEG,a14 FCALL ROMCHECK,b5 jrnz PROMABORT move b0,a12 movi CPUT_CLR,a0 movi CPUT_CLRS,a1 movi COLOR_BLACK,a2 FCALL RECTANGLE,b6 movi SYSCINIT,a14 move a14,@SYSCTRL,W ; Back to IROM bank 0 move a12,a12 jrnz PBADROM PROMABORT movi SYSCINIT,a14 move a14,@SYSCTRL,W ; Back to IROM bank 0 MOVE B0,A12 MOVI CPUT_CLR,A0 MOVI CPUT_CLRS,A1 MOVI COLOR_BLACK,A2 FCALL RECTANGLE,B6 MOVE A12,A12 *WE CHECK ON THE DMA HERE PDMACK 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 movi SNDCMESS,a0 movi [CPUT_Y1,CPUT_X],a1 clr a2 movi COLOR_YELLOW,a3 FCALL STRING,b6 FCALL SNDCHECK,b6 move a0,a12 movi CPUT_CLR,a0 movi CPUT_CLRS,a1 movi COLOR_BLACK,a2 FCALL RECTANGLE,b6 move a12,a12 jrnz PBADSND movi PICCMESS,a0 movi [CPUT_Y1,CPUT_X],a1 clr a2 movi COLOR_YELLOW,a3 FCALL STRING,b6 FCALL PICCHECK,b5 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 movi PICBADMESS,a0 movi [CPUT_Y1,CPUT_X],a1 clr a2 movi COLOR_RED,a3 FCALL STRING,b6 jruc PCPUBAD PBADSND movi SNDBADMESS,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 move @_watchdog_addr,a0,L move a0,*a0 .IF TUNIT MOVI CPU_ERROR_SND,A0 move @_sound_addr,a3,L move a0,*a3,W .ELSE MOVI 0FD00H|CPU_ERROR_SND,A0 move @_sound_addr,a3,L move a0,*a3,W MOVI 0FF00H|CPU_ERROR_SND,A0 move @_sound_addr,a3,L move a0,*a3,W .ENDIF MOVE A13,B5 PAUSE 10000,B6 FCALL fudge_switches_diag,B6 andi BUTTONS|START_BITS,a0 MOVE A0,B1 MOVI -1,B0 ; ASSUME DON'T TIMEOUT CMPI DIAGSP,SP JRZ PCPUTMP1 CMPI BURNSP,SP JRZ PCPUTMP1 MOVI 200000H,B0 PCPUTMP1 move @_watchdog_addr,a0,L move a0,*a0 MOVE B0,B0 JRN PCPUNOTIMEOUT DEC B0 JRZ PCPURET ; TIMEOUT HERE PCPUNOTIMEOUT FCALL fudge_switches_diag,B6 andi BUTTONS|START_BITS,a0 MOVE B1,A1 CMP A0,A1 JRNZ PCPURET JRUC PCPUTMP1 PCPUGOOD CLR A0 JRUC PCPUREALRET PCPURET MOVK 1,A0 PCPUREALRET MOVE A0,A0 FRET SP DMACMESS .STRING "CHECKING CUSTOM",0 .EVEN DMABADMESS .STRING "CUSTOM CHIP U33 BAD",0 .EVEN ROMCMESS .STRING "CHECKING ROMS",0 .EVEN ROMBADMESS .STRING "ROM CHIPS BAD",0 .EVEN RAMBADMESS .STRING "RAM CHIPS BAD",0 .EVEN SNDCMESS .string "CHECKING SOUND SECTION",0 .even SNDBADMESS .string "SOUND SECTION BAD",0 .even PICCMESS .string "CHECKING PIC CHIP",0 .even PICBADMESS .string "PIC CHIP BAD",0 .even CPUGOOD .STRING "CPU BOARD OK",0 .EVEN CPUPAUSE .STRING "PRESS ANY BUTTON",0 .EVEN CPUEXIT1_MESS .STRING "HOLD START BUTTON",0 .EVEN CPUEXIT2_MESS .STRING "TO EXIT.",0 .EVEN ************************************************************************** * * * CPUDRAW * * * * PLOT THE CPU BOARD AND DRAW ALL THE CHIPS * * * * ENTRY * * B5 RETURN ADDRESS * * * * EXIT * * NOTHING * * * ************************************************************************** CPUDRAW: MOVI CPU_VECS,A9 ; POINT AT VECTOR TABLE CPUDLP1 MOVE *A9+,A2,W ; GET COLOR JRZ CPUD1 MOVE *A9+,A0,L ; START POINT MOVE *A9+,A1,L ; END POINT FCALL HVLINE,B6 JRUC CPUDLP1 CPUD1 MOVE B5,A13 FCALL CHIPPLOT,B5 ; PLOT ALL THE CHIPS MOVI BOARDSTRING,A0 move @DIPSWITCH,a1,W andi DP4MEG_DIAG,a1 jrz bdtype_4meg movi BOARDSTRING1,a0 bdtype_4meg: MOVI [25,270],A1 CLR A2 MOVI COLOR_WHITE,A3 FCALL STRING,B6 MOVI BOARDSTRING2,A0 MOVI [37,274],A1 FCALL STRING,B6 MOVE A13,B5 FRET B5 BOARDSTRING BOARDSTRING1: .string "A-18968-40030",0 .EVEN BOARDSTRING2 .STRING "WRESTLEMANIA",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 ; GET ME A COLOR FCALL RECTANGLE,B6 CONOFILL MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION MOVE A5,A0 ADD 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 MOVE A11,A11 ; CHECK FOR COLOR JRNZ COBLACK MOVI COLOR_WHITE,A3 COBLACK FCALL STRING,B6 FRET B5 CHIPCOLORS: .WORD COLOR_BLACK .WORD COLOR_GREEN .WORD COLOR_RED .WORD COLOR_GREY ************************************************************************** * * * DMACHECK * * * * CHECK THE DMA OUT * * * * ENTRY * * B5 RETURN ADDRESS * * * * EXIT * * A0 DMA STATUS * * 0 = GOOD * * 1 = BAD * * * ************************************************************************** DMACHECK setf 16,1,0 move @_watchdog_addr,a0,L move a0,*a0 CLR A14 MOVE A14,@DMACTRL,W MOVE A14,@DMACTRL,W MOVK DMACF4,A14 MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER MOVI [511,0],A14 MOVE A14,@DMAWINDOW,L ;OPEN LEFT TO RIGHT MOVI DMAWIN|DMACF4,A14 MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER MOVI [511,0],A14 MOVE A14,@DMAWINDOW,L ;FULL HEIGHT WINDOW MOVI [100H,100H],A14 MOVE A14,@DMASCALEX,L MOVI [1,448],A14 ;BLOW OUT TRADEMARK MOVE A14,@DMAHSIZE,L CLR A14 MOVE A14,@DMAOFFST,W ;OFFSET MOVE A14,@DMACONST,W ;CONSTANT MOVE A14,@DMAHORIZ,L ;CLEAR DESTINATION ADDRESS clr a14 MOVE A14,@DMASAGL,L MOVI 257,A14 MOVE A14,@DMAVERT,W ;OFFSCREEN PLOT MOVI 0505H,A14 MOVE A14,@DMACMAP,W MOVI 8003H,A14 ;USE IMAGE ROM - WRITE ALWAYS MOVE A14,@DMACTRL,W ;KICK OFF THE DMA MOVI 7FFFH,A14 ;LOAD TIMEOUT COUNTER DMACWAIT move @_watchdog_addr,a0,L move a0,*a0 MOVE @DMACTRL,A0,W ;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,@DMACMAP,W MOVI 0101000H,A0 ;LINEAR SCREEN LOCATION OF DATA MOVI 2000000H,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 * .if WWFUNIT movi SYSCINIT,a13 andni PALENB,a13 .else MOVI PAL_SELECT,A13 .endif MOVE A13,@SYSCTRL,W ;ENABLE PALETTE MOVI 0101000H,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 MOVE A0,@DMACTRL,W MOVE A0,@DMACTRL,W MOVE A0,@DMACMAP,W MOVK 1,A0 DMACRET .if WWFUNIT movi SYSCINIT,a13 .else MOVI 0FFFCH,A13 .endif MOVE A13,@SYSCTRL,W SETF 16,0,0 MOVE A0,A0 FRET B5 DOG_COUNT .EQU 8000H ;EVERY 32K .align ************************************************************************** * * * RAMCHECK * * * * CHECK A BANK OF RAM, GIVEN A STARTING TABLE ADDRESS * * * * ENTRY * * A14 POINTER TO RAM TABLE * * B5 RETURN ADDRESS * * * * EXIT * * B0 LIST OF ERRORS * * * ************************************************************************** RAMCHECK: movb a0,@WATCHDOG ; We have to do this because ; The scratch ram test trashes ; the data at _watchdog address 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 CLR A5 MOVI DOG_COUNT,B14 RAC1 SLA 1,A7 ; GENERATE A PSEUDO JRV RAC2 ; RANDOM NUMBER movk 2,a4 or a4,a7 RAC2 MOVE A7,A6 ADDC A5,A6 MOVE A6,*A8+,1 ; WRITE DSJS B14,RAC1_NODOG movb a0,@WATCHDOG ; We have to do this because ; The scratch ram test trashes ; the data at _watchdog address 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 MOVI DOG_COUNT,B14 RAC3 SLA 1,A7 ; GENERATE A PSEUDO JRV RAC4 ; RANDOM NUMBER movk 2,a4 or a4,a7 RAC4 MOVE A7,A6 ADDC A5,A6 move *a8,a4,0 ;Read add a11,a8 ZEXT A6 CMP A6,A4 jrne rac5 ;Error? DSJS B14,RAC5_NODOG movb a0,@WATCHDOG ; We have to do this because ; The scratch ram test trashes ; the data at _watchdog address MOVI DOG_COUNT,B14 ;AND RELOAD COUNT RAC5_NODOG DSJS A9,RAC3 jruc showstat rac5 ;Error! 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 showstat SETF 16,0,0 ; RESET FIELDS SETF 32,0,1 movb a0,@WATCHDOG ; We have to do this because ; The scratch ram test trashes ; the data at _watchdog address ; 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 ************************************************************************** * * * ROMCHECK - ROUTINE TO CHECKSUM THE PROGRAM AND IMAGE ROMS. * * RETURNS * * B0 = BITS SET FOR BAD ROMS. * * Z = TEST FINISHED. * * NZ = TEST ABORTED BY USER. * * * ************************************************************************** .align ROMCHECK: move @_watchdog_addr,a0,L move a0,*a0 ROMLOOP CLR B2 MOVE *A14(ROM_CKSM),A13,W ; 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 setf 8,0,1 rcilp move *a12,a7,1 ;Get a byte add a11,a12 add a7,a8 dsjs b14,rcilp_nodog setf 32,0,1 move @_watchdog_addr,a0,L move a0,*a0 setf 8,0,1 movi DOG_COUNT,b14 ;AND RELOAD COUNT rcilp_nodog dsjs a13,rcilp setf 32,0,1 *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 move @_watchdog_addr,a0,L move a0,*a0 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 @_coin_addr,a13,L move *a13,a13,W sll 16,a13 ANDI START_BITS,A13 CMPI START_BITS,A13 JRNE ROMABORT JRUC ROMLOOP ;BACK FOR THE NEXT *HERE ON OPERATOR ABORT ROMABORT CLRZ FRET B5 ROMEMPTY clr a12 setz FRET B5 ************************************************************************** * * * MONITOR STUFF * * * ************************************************************************** CROSS_H CONV_PLOT MOVI MON_RECS,A9 CPRLP1 MOVE *A9+,A2,W ; GET COLOR JRZ CPRDONE MOVE *A9+,A0,L ; START POINT MOVE *A9+,A1,L ; DIMENSIONS FCALL RECTANGLE,B6 JRUC CPRLP1 CPRDONE MOVI MON_VECS,A9 ; POINT AT VECTOR TABLE CPVLP1 MOVE *A9+,A2,W ; GET COLOR JRZ CPVDONE MOVE *A9+,A0,L ; START POINT MOVE *A9+,A1,L ; END POINT FCALL HVLINE,B6 JRUC CPVLP1 CPVDONE MOVI MON_DOTS,A9 ; POINT AT DOT TABLE CPDLP1 MOVE *A9+,A1,W ; GET COLOR JRZ CPDDONE MOVE *A9+,A0,L ; GET THE POINT FCALL POINT,B6 JRUC CPDLP1 CPDDONE RETS ************************************************************************** * * * MONITOR TEST DATA AREA * * * ************************************************************************** MON_VECS: VECMAC ROBO_WHITE,004,004,390,004 VECMAC ROBO_WHITE,004,004,004,250 VECMAC ROBO_WHITE,004,250,390,250 VECMAC ROBO_WHITE,390,250,390,004 VECMAC ROBO_WHITE,060,005,060,250 VECMAC ROBO_WHITE,115,005,115,250 VECMAC ROBO_WHITE,170,005,170,250 VECMAC ROBO_WHITE,225,005,225,250 VECMAC ROBO_WHITE,280,005,280,250 VECMAC ROBO_WHITE,335,005,335,250 VECMAC ROBO_WHITE,005,054,390,054 VECMAC ROBO_WHITE,005,103,390,103 VECMAC ROBO_WHITE,005,152,390,152 VECMAC ROBO_WHITE,005,201,390,201 .LONG 0 MON_RECS: VECMAC ROBO_RED, 182,000,030,005 ; TOP VECMAC ROBO_GREEN, 182,005,030,006 VECMAC ROBO_RED, 182,250,030,005 ; BOTTOM VECMAC ROBO_GREEN, 182,244,030,006 VECMAC ROBO_RED, 000,117,005,020 ; LEFT VECMAC ROBO_GREEN, 005,117,006,020 VECMAC ROBO_RED, 390,117,005,020 ; RIGHT VECMAC ROBO_GREEN, 384,117,006,020 .LONG 0 MON_DOTS: DOTMAC ROBO_WHITE,032,029 DOTMAC ROBO_WHITE,087,029 DOTMAC ROBO_WHITE,142,029 DOTMAC ROBO_WHITE,197,029 DOTMAC ROBO_WHITE,252,029 DOTMAC ROBO_WHITE,307,029 DOTMAC ROBO_WHITE,362,029 DOTMAC ROBO_WHITE,032,078 DOTMAC ROBO_WHITE,087,078 DOTMAC ROBO_WHITE,142,078 DOTMAC ROBO_WHITE,197,078 DOTMAC ROBO_WHITE,252,078 DOTMAC ROBO_WHITE,307,078 DOTMAC ROBO_WHITE,362,078 DOTMAC ROBO_WHITE,032,127 DOTMAC ROBO_WHITE,087,127 DOTMAC ROBO_WHITE,142,127 DOTMAC ROBO_WHITE,197,127 DOTMAC ROBO_WHITE,252,127 DOTMAC ROBO_WHITE,307,127 DOTMAC ROBO_WHITE,362,127 DOTMAC ROBO_WHITE,032,176 DOTMAC ROBO_WHITE,087,176 DOTMAC ROBO_WHITE,142,176 DOTMAC ROBO_WHITE,197,176 DOTMAC ROBO_WHITE,252,176 DOTMAC ROBO_WHITE,307,176 DOTMAC ROBO_WHITE,362,176 DOTMAC ROBO_WHITE,032,225 DOTMAC ROBO_WHITE,087,225 DOTMAC ROBO_WHITE,142,225 DOTMAC ROBO_WHITE,197,225 DOTMAC ROBO_WHITE,252,225 DOTMAC ROBO_WHITE,307,225 DOTMAC ROBO_WHITE,362,225 .LONG 0 PRIMARY_COLORS: RECTMAC ROBO_RED,0,0,395,255 RECTMAC ROBO_GREEN,0,0,395,255 RECTMAC ROBO_BLUE,0,0,395,255 .LONG 0 COLOR_BARS: RECTMAC ROBO_BLACK, 0, 0, 49, 16 RECTMAC ROBO_BLACK, 49, 0, 49, 16 RECTMAC ROBO_BLACK, 98, 0, 49, 16 RECTMAC ROBO_BLACK, 147, 0, 49, 16 RECTMAC ROBO_BLACK, 196, 0, 49, 16 RECTMAC ROBO_BLACK, 245, 0, 49, 16 RECTMAC ROBO_BLACK, 294, 0, 49, 16 RECTMAC ROBO_BLACK, 343, 0, 49, 16 .LONG 0 ************************************************************************** * * * COLORBAR * * * ************************************************************************** COL_BARS COLORBAR MOVI INTENSITIES_START,A0,L MOVI COLRAM+100H,A1,L MOVK 16, A2 ;5 BITS / COLOR MOVK 8, A6 ;# COLOR BARS CB3 ADDI >F00,A1 ;STEP TO NEXT PALETTE MOVE *A0+,A3 ;STARTING COLOR MOVE *A0+,A4 ;COLOR DECREMENT MOVE A2,A5 CB4 MOVE A3,*A1+ SUB A4,A3 DSJS A5,CB4 DSJS A6,CB3 ; ========================= ; | DISPLAY COLOR BARS | ; ========================= CLR A14 MOVE A14,@DMACTRL,W ; HALT THE DMA MOVE A14,@DMACTRL,W MOVI 0101H,A14 MOVE A14,A8 MOVI COLOR_BARS, A3, L ; COLOR BAR TABLE MOVI [16,0], A13, L ; POSITION INCRMENT MOVI 101H,A12 MOVK 16, A11 ; # INTENSITIES / BAR MOVK 8,A6 ;THIS MANY BARS CB6 CLR A2 ; STARTING COLOR MOVE *A3+,A1,L JRZ CB8 MOVE A8,@DMACMAP,W ;STUFF PALETTE MOVE *A3+,A0,L ADDK 16,A3 MOVE A11,A10 CB7 FCALL RECTANGLE, B6 ADD A13, A0 ADD A12, A2 DSJS A10, CB7 ADD A14,A8 ;NEXT PALETTE PLEASE DSJ A6,CB6 CB8 CLR A14 MOVE A14,@DMACMAP RETS INTENSITIES_START .WORD 03E0H ; GREEN .WORD 0040H ; BUMP GREEN .WORD 7C00H ; RED .WORD 0800H ; BUMP RED .WORD 001FH ; BLUE .WORD 0002H ; BUMP BLUE .WORD 0000H ; BLACK .WORD 0000H ; BUMP BLACK .WORD 7FFFH ; WHITE .WORD 0842H ; BUMP WHITE .WORD 7FE0H ; YELLOW .WORD 0840H ; BUMP YELLOW .WORD 7C1FH ; PURPLE .WORD 0802H ; BUMP PURPLE .WORD 03FFH ; CYAN .WORD 0042H ; BUMP CYAN .LONG 0 ************************************************************************** * SWITCHTEST - Test regular or DIP switches * A0=Mode (0=Switches, 1=DIPs) DONEMASK EQU 00240000H ; P1 + P2 START .BSS DONECNT,32 ; FOR SWITCH TEST SWITCHTEST PUSH a12,a13 subk 1,a0 jreq DIPTEST clr a0 move a0,@_switch_map_mode,L ; No switch mapping movk 10h,A13 MOVE A13,@DONECNT,L CLR A13 ; THE HOLD ME REGISTER MOVE A13,@SWSET1,L MOVE A13,@SWSET2,L MOVI BUT_TABLE,A9 CLR A10 CALLR BUT_PLOT ; PLOT SOME BUTTONS MOVI JOY_TABLE,A9 CALLR JOY_PLOT ; PLOT THE JOYSTICKS MOVI STR_TABLE,A9 CALLR STR_PLOT ; PLOT THE STRINGS MOVI BUT_STRS,A9 CALLR STR_PLOT ; PLOT THE BUTTON STRINGS MOVI [172,0],A0 MOVI [172,400],A1 MOVI ROBO_WHITE,A2 FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE SDLOOP PULL a12,a13 SLEEPK 2 PUSH a12,a13 move @_coin_addr,a10,L move *a10,a10,W move @_switch_addr,a14,L move *a14,a14,W sll 16,a10 sll 16,a14 ;mask off top 16 srl 16,a14 or a14,a10 NOT A10 MOVE A10,A0 ANDI DONEMASK,A0 CMPI DONEMASK,A0,L ; CHECK FOR DONE JRNZ SDGO MOVE @DONECNT,A0,L ;REQUIRE A CERTAIN TIME DEC A0 MOVE A0,@DONECNT,L JRNE SDGO switchx PULL a12,a13 movk 1,a0 move a0,@_switch_map_mode,L ; Back to menu switch map RETP SDGO MOVE @SWSET1,A11,L CMP A11,A10 ; CHECK FOR CHANGES JRZ SDCK2 MOVE A10,@SWSET1,L move @_switch2_addr,a10,L move *a10,a10,W NOT A10 SLL 16,A10 SRL 16,A10 JRUC SDPRC1 SDCK2 move @_switch2_addr,a10,L move *a10,a10,W not a10 sll 16,a10 srl 16,a10 MOVE @SWSET2,A11,L CMP A11,A10 JRZ SDLOOP SDPRC1 MOVE A10,@SWSET2,L SDPROC CLR A0 MOVE A0,@SCHANGE MOVI BUT_TABLE,A9 CALLR BUT_PLOT MOVI BUT_STRS,A9 CALLR STR_PLOT ; PLOT THE BUTTON STRINGS MOVI JOY_TABLE,A9 CALLR JOY_UPDATE ; UPDATE THE JOYSTICK INFO MOVE @SCHANGE,A0 JRZ SDLOOP MOVI SWITCH_SND,A3 calla SNDSND JRUC SDLOOP ************************************************************************** * * * SET_DIP_COINAGE - SETUP COINAGE ACCORDING TO THE DIPSWITCHES * * * ************************************************************************** SET_DIP_COINAGE MMTM SP,A0,A1,A2,A6 CALLR READ_DIP MOVE A0,A2 ANDI DPUSECMOS,A2 ;USING CMOS? JRNZ SDC_X ;BR=YES, DO NOT LOAD COINAGE MOVE A0,A2 ANDI DPCOUNTRY,A0 SRL DPCOUNTRY_SRL,A0 ; CHANGE TO TO MULTIPLE OF 32 SLL 5,A0 ADDI DIPCOINTAB,A0 MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE ANDI DPCOINAGE,A2 CMPI DPCOINAGE,A2 ; CHECK FOR FREEPLAY JRZ CMOS21 SRL DPCOINAGE_SRL,A2 SLL 4,A2 ADD A2,A1 MOVE *A1,A1,W ; WHICH COIN TABLE TO USE MOVI ADJPRICE,A0 CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. CMP A0,A1 ;DID WE CHANGE COIN MODES JREQ SDC_SAMEC CALLA NO_CREDS ;CLEAR CREDITS CALLA CRED_P ;LINK-OUT! SDC_SAMEC 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 F_ADC_S ;CHECKSUM THE ADJUSTMENTS CALLA GET_CSPT CALLA SET_COIN_ADJ ; SET THE ADJUSTMENTS UP IN CMOS CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS JRUC SDC_X CMOS21 MOVI ADJFREPL,A0 MOVK 1,A1 ; FREEPLAY, DUDE! CALLA PUT_ADJ JRUC CMOS20 SDC_X MMFM SP,A0,A1,A2,A6 RETS ************************************************************************** * * * DIPTEST * * * * DIP SWITCH TESTING * * * ************************************************************************** DIPTEST: movk 3,a14 move a14,@_switch_map_mode,L ; Any button mapping MOVK 1,A14 MOVE A14,@DIP1ST,W ;YES THIS IS THE FIRST TIME THROUGH CALLR READ_DIP MOVE A0,@DIPVAL,W DT_PLOT MOVI DIP_VECS,A9 ; POINT AT VECTOR TABLE DTVLP1 MOVE *A9+,A2,W ; GET COLOR JRZ DTVDONE MOVE *A9+,A0,L ; START POINT MOVE *A9+,A1,L ; END POINT FCALL HVLINE,B6 JRUC DTVLP1 DTVDONE MOVI DIP_STRS,A9 CALLR STR_PLOT CALLR SET_DIP_COINAGE CALLR DIPPLOT CALLR DIPSTATE MOVE @DIP1ST,A14,W JRNZ DTL_SKIP_SND MOVI DIP_SND,A0 move @_sound_addr,a9,L move a0,*a9,W DTL_SKIP_SND CLRM @DIP1ST,W CALLA fudge_switches ;get fudged switches in a0 andi BUTTONS|START_BITS,a0 MOVE A0,@SWSET1,L DTLOOP PULL a12,a13 SLEEPK 1 PUSH a12,a13 ; CALLA CKTEST ; EMERGENCY EXIT CALLA fudge_switches ;get fudged switches in a0 MOVE @SWSET1,A1,L andi BUTTONS|START_BITS,a0 CMP A0,A1 JRNZ DT_X CALLR READ_DIP MOVE @DIPVAL,A1,W ZEXT A1 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 JRUC switchx ************************************************************************** * * * DIPSTATE * * * * PLOT OUT THE STATES OF ALL THE DIP SWITCHES * * * * ENTRY * * NOTHING * * * * EXIT * * NOTHING * * * ************************************************************************** DIPSTATE MOVI [82,74],A0 MOVI [104,140],A1 MOVI COLOR_BLACK,A2 FCALL RECTANGLE,B6 MOVI [82,284],A0 MOVI [104,111],A1 MOVI COLOR_BLACK,A2 FCALL RECTANGLE,B6 CALLR READ_DIP MOVE A0,A10 ;LET'S KEEP A COPY CLR A2 MOVI COLOR_WHITE,A3 CLR A7 MOVI DUSECMOS_0,A1 ANDI DPUSECMOS,A0 JRZ DS1 MOVK 1,A7 MOVI DUSECMOS_1,A1 DS1 MOVE A1,A0 MOVI [89,75],A1 FCALL STRING,B6 *PLOT CURRENT COINAGE MOVE A7,A7 ;ARE WE CMOS OR DIPSWITCH JRZ DS_PC ;BR = DIPSWITCH MOVI [113,75],A1 MOVI DUNUSED,A0 ;JUST PRINT UNUSED FCALL STRING,B6 JRUC DS_SC ;AND GO FOR THE NEXT SWITCHES DS_PC MOVI COLOR_WHITE,A3 MOVI [101,75],A1 MOVI DCOINAGE,A0 FCALL STRING,B6 MOVE A10,A0 ANDI DPCOUNTRY,A0 SRL DPCOUNTRY_SRL,A0 SLL 5,A0 ADDI DCOINTAB,A0 MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE MOVE A10,A0 ANDI DPCOINAGE,A0 SRL DPCOINAGE_SRL,A0 SLL 5,A0 ADD A0,A1 MOVE *A1,A0,L ; NOW POINTING AT MESSAGE CLR A2 MOVI [101,132],A1 FCALL STRING,B6 *PLOT CREDITS TO START, CREDITS TO CONTINUE MOVI DTOSTART,A0 MOVI [113,90],A1 FCALL STRING,B6 MOVI DTOCONTINUE,A0 MOVI [125,90],A1 FCALL STRING,B6 MOVI ADJCSTRT,A0 CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) MOVE A0,A8 CMPI 9,A8 JRLS DSTS_1 MOVK 9,A8 DSTS_1 CALLA HEXTOASC MOVE A8,A0 MOVI [113,80],A1 FCALL STRING,B6 MOVI ADJCCONT,A0 CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) MOVE A0,A8 CMPI 9,A8 JRLS DSTC_1 MOVK 9,A8 DSTC_1 CALLA HEXTOASC MOVE A8,A0 MOVI [125,80],A1 FCALL STRING,B6 DS_SC *PLOT COUNTRY SELECTION MOVE A10,A0 ANDI DPCOUNTRY,A0 SRL DPCOUNTRY_SRL,A0 SLL 5,A0 ADDI DCOUNTRY_TAB,A0 MOVE *A0,A0,L MOVI [143,75],A1 FCALL STRING,B6 *PLOT COIN COUNTER MODE MOVE A10,A7 ANDI DPCOUNTER,A7 SRL DPCOUNTER_SRL,A7 SLL 6,A7 ADDI DCOUNTER_TAB,A7 MOVE *A7+,A0,L MOVI [163,75],A1 FCALL STRING,B6 MOVE *A7+,A0,L MOVI [175,75],A1 FCALL STRING,B6 *PLOT NUMBER OF PLAYERS ALLOWED MOVI DUNUSED,A0 MOVI [89,285],A1 FCALL STRING,B6 ;;; *PLOT DOLLAR BILL VALIDATOR STATUS MOVI DNOVALIDATOR,A0 ;ASSUME NO VALIDATOR MOVE A10,A1 ANDI DPVALIDATOR,A1 ;DO WE HAVE ONE? JRZ DSTS_NOV ;BR = NO MOVI DVALIDATOR,A0 ;ASSUME NO VALIDATOR DSTS_NOV MOVI [101,285],A1 FCALL STRING,B6 *PLOT video clips off/on message MOVI DCLIPS,A0 ;Assume clips on MOVE A10,A1 ANDI DPNOVIDCLIPS,A1 JRZ DSTS_NOC ;BR = NO MOVI DNOCLIPS,A0 ;Assume no clips wanted DSTS_NOC MOVI [113,285],A1 FCALL STRING,B6 MOVI DUNUSED,A0 MOVI [125,285],A1 FCALL STRING,B6 movi TD_ON,a0 move a10,a1 andi DPTDON,a1 jrnz dtd_off movi TD_OFF,a0 dtd_off MOVI [137,285],A1 FCALL STRING,B6 MOVI DUNUSED,A0 MOVI [149,285],A1 FCALL STRING,B6 *PLOT skip over powerup test message MOVI DPOWER,A0 MOVE A10,A1 ANDI DPPOWER,A1 JRZ DSTS_NOP MOVI DNOPOWER,A0 DSTS_NOP MOVI [161,285],A1 FCALL STRING,B6 MOVI DTEST_0,A0 MOVI [173,285],A1 FCALL STRING,B6 RETS ************************************************************************** * * * DIPPLOT * * * * PLOT OUT THE DIP SWITCHES * * * * ENTRY * * NOTHING * * * * EXIT * * NOTHING * * * ************************************************************************** DIPPLOT: MOVI [83,21],A0 MOVI [104,38],A1 MOVI COLOR_BLACK,A2 FCALL RECTANGLE,B6 MOVI [83,231],A0 MOVI [104,38],A1 MOVI COLOR_BLACK,A2 FCALL RECTANGLE,B6 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 .IF TUNIT=0 JRLO DIPL2 .ELSE JRHS DIPL2 .ENDIF MOVI 210,A5 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 MOVE A1,A0 ; SET STRING MOVE A3,A1 ; SET LOCATION MOVE A4,A3 CLR A2 ; HORIZONTAL FCALL STRING,B6 MMFM SP,A0,A2 INC A2 CMPI 16,A2 JRLO DIPLOOP RETS DIPYTAB .LONG 89,101,113,125,137,149,161,173 .LONG 89,101,113,125,137,149,161,173 ************************************************************************** * * * READ_DIP * * * * READ IN BOTH DIP SWITCHES * * * * ENTRY * * NOTHING * * * * EXIT * * A0 DIP SWITCH * * * ************************************************************************** READ_DIP: MMTM SP,A1,A2,A3 move @_dipswitch_addr,a0,L move *a0,a0,W NOT A0 ; INVERT IT FOR TRUE BITS CLR A1 movk 7,a2 RDLOOP BTST A2,A0 JRZ RD1 MOVK 7,A3 SUB A2,A3 BSET A3,A1 RD1 addk 8,a2 BTST A2,A0 JRZ RD2 MOVK 15,A3 SUB A2,A3 addk 8,a3 BSET A3,A1 RD2 subk 8,a2 DEC A2 JRNN RDLOOP MOVE A1,A0 MMFM SP,A1,A2,A3 RETS ************************************************************************** * * * JOY_MESS * * * * PLOT THE STATUS OF A JOYSTICK AROUND A CIRCLE * * * * ENTRY * * A9 CENTER OF STICK CIRCLE * * A10 BUTTON MASK * * A11 COLOR * * * * EXIT * * NOTHING * * * ************************************************************************** JOY_MESS MOVI JJJTAB,A8 MOVK 4,A7 JML MOVI ROBO_BLACK,A3 SRL 1,A10 JRNC JM1 MOVE A11,A3 ; SET COLOR MOVK 1,A14 MOVE A14,@SCHANGE,W JM1 MOVE *A8+,A0,L MOVE A9,A1 ; CIRCLE CENTER MOVB *A8,A2 ;X CORRECTION ADDK 8,A8 ADD A2,A1 MOVB *A8,A2 ;Y CORRECTION ADDK 8,A8 SLL 16,A2 ADD A2,A1 CLR A2 ; DIRECTION CALLR STRNEW DSJS A7,JML RETS * *JOYSTICK MESSAGE TABLE * JJJTAB .LONG UPMESS .BYTE -7,-25 .LONG DOWNMESS .BYTE -13,18 .LONG LEFTMESS .BYTE -39,-4 .LONG RIGHTMESS .BYTE 18,-4 ************************************************************************** * * * 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: clr b4 ;OFFSET MOVE *A9,A1,L ; XY LOC JRZ BPDONE ADDK 32,A9 MOVE *A9+,A0 ; 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 ADDK 16,A9 AND A10,A11 ; MASK OFF SOMETHING USEFUL JRZ BPHOLLOW ADDI CFILL,A6 ; MASK IN THE FILL BITS JRUC BPCIRC BPHOLLOW MMTM SP,A0,A1,A6 MOVI ROBO_BLACK,A6 ADDI CFILL,A6 FCALL CIRCLE,B6 MMFM SP,A0,A1,A6 JRUC BPCIRC2 BPCIRC MOVK 1,A14 MOVE A14,@SCHANGE,W BPCIRC2 FCALL CIRCLE,B6 JRUC BUT_PLOT BPDONE RETS ************************************************************************** * * * JOY_PLOT * * * * PLOT A BUTTON TABLE ON THE SCREEN * * * * ENTRY * * A9 POINTS TO BUTTON TABLE LIST * * * ************************************************************************** JOY_PLOT: MOVE *A9,A1,L ; XY LOC JRZ JPDONE ADDK 32,A9 MOVE *A9+,A0 ; RADIUS MOVE *A9,A6,L ; COLOR ADDI 96,A9 FCALL CIRCLE,B6 JRUC JOY_PLOT JPDONE RETS ************************************************************************** * * * JOY_UPDATE * * * * UPDATE ALL THE STICK INFORMATION * * * * ENTRY * * A9 JOYSTICK TABLE POINTER * * A10 SWITCH INFORMATION * * * * EXIT * * NOTHING * * * ************************************************************************** JOY_UPDATE: MOVE *A9,A1,L ; XY LOC JRZ JUDONE ADDI 32,A9 MOVE *A9+,A0 ; RADIUS MOVE *A9+,A11,L ; COLOR MOVE *A9+,A6,L ; MASK MOVE *A9+,A7 ; SHIFT COUNT MOVE *A9,A8 ; EXTEND-O-BIT FOR JAMMA JRZ JULOW MOVE @SWSET2,A10,L JRUC JUAND JULOW MOVE @SWSET1,A10,L JUAND ADDK 16,A9 AND A10,A6 ; MASK OFF JOYSTICK BITS NOT A7 ADDK 1,A7 SRL A7,A6 ; ZERO BASE THE LITTLE SUCKER MMTM SP,A9,A10,A8,A7 MOVE A1,A9 ; CENTER OF STICK HERE MOVE A6,A10 ; BUTTON MASK CALLR JOY_MESS MMFM SP,A9,A10,A8,A7 JRUC JOY_UPDATE JUDONE RETS ************************************************************************** * * * STR_PLOT * * * * PLOT A STRING TABLE ON THE SCREEN * * * * ENTRY * * A9 POINTS TO STRING TABLE LIST * * * ************************************************************************** STR_PLOT MOVE *A9,A1,L ;XY LOC JRZ STDONE ADDK 32,A9 MOVE *A9+,A0,L ;STRING PTR MOVE *A9+,A3 ;COLOR MOVE *A9+,A2 ;DIRECTION FCALL STRING,B6 JRUC STR_PLOT STDONE RETS CFILL EQU 0FFFF0000H ; FORMAT ; ; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT P1BC .equ 80 P2BC .equ 160 P3BC .equ 240 P4BC .equ 320 PBCY .equ 162-40 P1BX equ P2BC P2BX equ P4BC PBY equ 110 BUT_TABLE BUT_MAC P1BX-24,PBY-12,10,ROBO_BLUE,010H,0,0 ; P1 A1 (PUNCH) BUT_MAC P1BX, PBY,10,ROBO_RED,020H,0,0 ; P1 A2 (BLOCK) BUT_MAC P1BX+24,PBY-12,10,ROBO_BLUE,040H,0,0 ; P1 A3 (SPUNCH) BUT_MAC P1BX-24,PBY+12,10,ROBO_BLUE,01H,0,1 ; P1 A5 (KICK) BUT_MAC P1BX+24,PBY+12,10,ROBO_BLUE,02H,0,1 ; P1 A6 (SKICK) BUT_MAC P2BX-24,PBY-12,10,ROBO_BLUE,01000H,0,0 ; P2 A1 (PUNCH) BUT_MAC P2BX, PBY,10,ROBO_RED,02000H,0,0 ; P2 A2 (BLOCK) BUT_MAC P2BX+24,PBY-12,10,ROBO_BLUE,04000H,0,0 ; P2 A3 (SPUNCH) BUT_MAC P2BX-24,PBY+12,10,ROBO_BLUE,10H,0,1 ; P2 A5 (KICK) BUT_MAC P2BX+24,PBY+12,10,ROBO_BLUE,20H,0,1 ; P2 A6 (SKICK) BUT_MAC P1BC,70,10,ROBO_WHITE,00040000H,0,0 ; P1 START BUT_MAC P3BC,70,10,ROBO_WHITE,00200000H,0,0 ; P2 START BUT_MAC 30,199,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT BUT_MAC 75,199,10,COLOR_PURPLE,00020000H,0,0 ; COIN RIGHT BUT_MAC 120,184,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER BUT_MAC 120,217,10,COLOR_GREEN,01000000H,0,0 ; FOURTH COIN BUT_MAC 214,199,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT BUT_MAC 332,184,10,COLOR_GREEN,00080000H,0,0 ; SLAM BUT_MAC 332,206,10,COLOR_GREEN,00100000H,0,0 ; TEST BUT_MAC 165,184,10,COLOR_PURPLE,10000000H,0,0 ; VOL UP BUT_MAC 165,217,10,COLOR_PURPLE,08000000H,0,0 ; VOL DOWN BUT_MAC 280,199,10,COLOR_PURPLE,20000000H,0,0 ; COINDOOR INTERLOCK BUT_MAC 332,228,10,COLOR_GREEN,80000000H,0,0 ; BILL VALIDATOR INPUT .LONG 0 ; X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND JOY_TABLE BUT_MAC P1BC,110,16,CFILL+ROBO_RED,0fH,0,0 ; P1 MOVE BUT_MAC P3BC,110,16,CFILL+ROBO_RED,0f00H,8,0 ; P2 MOVE .LONG 0 STR_TABLE STR_MAC P1BC-24,47,P1START,ROBO_RED,0 ; P1 START STR_MAC P3BC-24,47,P2START,ROBO_RED,0 ; P2 START STR_MAC 70,162,GETOUT1,ROBO_LASER,0 ;GET OUT MESSAGE 1 STR_MAC 12,225,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN STR_MAC 103,197,CENTER,COLOR_GREEN,0 ;CENTER COIN STR_MAC 103,230,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE STR_MAC 56,225,RIGHTSLOT,COLOR_PURPLE,0 ;RIGHT COIN STR_MAC 10,214,COINMESS1,COLOR_GREEN,0 ;BOTTOM MESSAGE STR_MAC 55,214,COINMESS2,COLOR_PURPLE,0 STR_MAC 193,214,SERVICE1,COLOR_GREEN,0 ;SERVICE CREDIT STR_MAC 197,225,SERVICE2,COLOR_GREEN,0 ;SERVICE CREDIT STR_MAC 347,181,SLAM,COLOR_GREEN,0 ;SLAM STR_MAC 347,204,TEST,COLOR_GREEN,0 ;TEST SWITCH STR_MAC 143,197,VOLUPMESS,COLOR_PURPLE,0 ;VOLUME UP STR_MAC 143,230,VOLDOWNMESS,COLOR_PURPLE,0 ;VOLUME DOWN STR_MAC 252,214,CDINTERLOCK1,COLOR_PURPLE,0 ;COINDOOR INTERLOCK 1 STR_MAC 252,225,CDINTERLOCK2,COLOR_PURPLE,0 ;COINDOOR INTERLOCK 2 STR_MAC 347,227,BILLVALID,COLOR_GREEN,0 ;BILL VALIDATOR STR_MAC P1BC-15,110-3,J1MESS,ROBO_WHITE,0 STR_MAC P3BC-15,110-3,J2MESS,ROBO_WHITE,0 .LONG 0 BUT_STRS .LONG 0 ************************************************************************** * * * DIP SWITCH DISPLAY STUFF * * * ************************************************************************** DIP_VECS: VECMAC COLOR_RED,20,82,60,82 ; DS1 VECMAC COLOR_RED,20,82,20,188 VECMAC COLOR_RED,20,188,60,188 VECMAC COLOR_RED,60,82,60,188 VECMAC COLOR_RED,230,82,270,82 ; DS2 VECMAC COLOR_RED,230,82,230,188 VECMAC COLOR_RED,230,188,270,188 VECMAC COLOR_RED,270,82,270,188 VECMAC COLOR_WHITE,63,92,73,92 VECMAC COLOR_WHITE,63,104,68,104 ;COINAGE MODE VECMAC COLOR_WHITE,63,128,68,128 VECMAC COLOR_WHITE,68,104,68,128 VECMAC COLOR_WHITE,68,116,73,116 VECMAC COLOR_WHITE,63,140,68,140 ;COUNTRY VECMAC COLOR_WHITE,63,152,68,152 VECMAC COLOR_WHITE,68,140,68,152 VECMAC COLOR_WHITE,68,146,73,146 VECMAC COLOR_WHITE,63,164,68,164 ;COIN COUNTER MODE VECMAC COLOR_WHITE,63,176,68,176 VECMAC COLOR_WHITE,68,164,68,176 VECMAC COLOR_WHITE,68,170,73,170 VECMAC COLOR_WHITE,273,92,283,92 ;# OF PLAYERS VECMAC COLOR_WHITE,273,104,283,104 ;UNUSED VECMAC COLOR_WHITE,273,116,283,116 ;UNUSED VECMAC COLOR_WHITE,273,128,283,128 ;UNUSED VECMAC COLOR_WHITE,273,140,283,140 ;UNUSED VECMAC COLOR_WHITE,273,152,283,152 ;UNUSED VECMAC COLOR_WHITE,273,164,283,164 ;UNUSED VECMAC COLOR_WHITE,273,176,283,176 ;TEST SWITCH .LONG 0 DIP_STRS: STR_MAC 30,70,DP_DS1,COLOR_WHITE,0 STR_MAC 240,70,DP_DS2,COLOR_WHITE,0 STR_MAC 7,89,DP_DSN1,COLOR_WHITE,0 STR_MAC 7,101,DP_DSN2,COLOR_WHITE,0 STR_MAC 7,113,DP_DSN3,COLOR_WHITE,0 STR_MAC 7,125,DP_DSN4,COLOR_WHITE,0 STR_MAC 7,137,DP_DSN5,COLOR_WHITE,0 STR_MAC 7,149,DP_DSN6,COLOR_WHITE,0 STR_MAC 7,161,DP_DSN7,COLOR_WHITE,0 STR_MAC 7,173,DP_DSN8,COLOR_WHITE,0 STR_MAC 217,89,DP_DSN1,COLOR_WHITE,0 STR_MAC 217,101,DP_DSN2,COLOR_WHITE,0 STR_MAC 217,113,DP_DSN3,COLOR_WHITE,0 STR_MAC 217,125,DP_DSN4,COLOR_WHITE,0 STR_MAC 217,137,DP_DSN5,COLOR_WHITE,0 STR_MAC 217,149,DP_DSN6,COLOR_WHITE,0 STR_MAC 217,161,DP_DSN7,COLOR_WHITE,0 STR_MAC 217,173,DP_DSN8,COLOR_WHITE,0 STR_MAC 100,230,DP_INS1,ROBO_LASER,0 .LONG 0 DP_DS1: .STRING "SW2",0 .EVEN DP_DS2: .STRING "SW1",0 .EVEN DP_DSN1 .STRING "8",0 .EVEN DP_DSN2 .STRING "7",0 .EVEN DP_DSN3 .STRING "6",0 .EVEN DP_DSN4 .STRING "5",0 .EVEN DP_DSN5 .STRING "4",0 .EVEN DP_DSN6 .STRING "3",0 .EVEN DP_DSN7 .STRING "2",0 .EVEN DP_DSN8 .STRING "1",0 .EVEN TD_ON: .string "TIME/DATE",0 .even TD_OFF: .string "NO TIME/DATE",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_0a .STRING "ONE COIN COUNTER",0 .EVEN DCOUNTER_0b .STRING "1 COUNT/COIN",0 .EVEN DCOUNTER_1a .STRING "TWO COIN COUNTERS",0 .EVEN DCOUNTER_1b .STRING "1 COUNT/COIN",0 .EVEN DCOUNTER_2a .STRING "ONE COIN COUNTER",0 .EVEN DCOUNTER_2b .STRING "TOTALIZING ",0 .EVEN DCOUNTER_TAB .LONG DCOUNTER_0a, DCOUNTER_0b .LONG DCOUNTER_1a, DCOUNTER_1b .LONG DCOUNTER_2a, DCOUNTER_2b .LONG DCOUNTER_0a, DCOUNTER_0b DCOINAGE .STRING "COINAGE",0 .EVEN DCOUNTRY_0 .STRING "USA",0 .EVEN DCOUNTRY_2 .STRING "FRENCH",0 .EVEN .if 0 DPLAYER_TAB .LONG DPLAYER_0, DPLAYER_1 .endif 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 .if 0 DPLAYER_0 .STRING "4 PLAYER KIT",0 .EVEN DPLAYER_1 .STRING "2 PLAYER KIT",0 .EVEN .endif DNOVALIDATOR .STRING "NO VALIDATOR",0 .EVEN DVALIDATOR .STRING "VALIDATOR INST.",0 .EVEN DCLIPS .STRING "UNUSED",0 .EVEN DNOCLIPS .STRING "UNUSED",0 .EVEN DPOWER .STRING "POWERUP TEST",0 .EVEN DNOPOWER .STRING "SKIP TEST",0 .EVEN DUCOIN7 .STRING "FREEPLAY",0 .EVEN DCOINTAB .LONG DUCOINTAB, DGCOINTAB, DFCOINTAB, DUCOINTAB DP_TITLE .STRING "DIPSWITCH SETTINGS",0 .EVEN DP_INS1 .STRING "PRESS ANY BUTTON TO EXIT",0 .EVEN DP_ON .STRING "ON",0 .EVEN DP_OFF .STRING "OFF",0 DUNUSED DGCOIN4 DCOUNTRY_3 .STRING "UNUSED",0 .EVEN 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_DSN1 .LONG DP_DSN1,DP_DSN1 .LONG DP_DSN2,DP_DSN2 .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 .if 0 dip_t STR_MAC 090h,20h,DIPMES0,ROBO_YELLOW,0 ;DIP SWITCH TEST STR_MAC DS1_XPOS+16,3Ch,DIPMES1,ROBO_GREEN,0 ;DIP SWITCH 1 STR_MAC DS2_XPOS+16,3Ch,DIPMES2,ROBO_GREEN,0 ;DIP SWITCH 2 STR_MAC 200-12*8,220,GETOUT2,ROBO_GREEN,0 ;exit message .LONG 0 dipline_t .word 20,10,379,10 .word 379,10,379,245 .word 379,245,20,245 .word 20,245,20,10 .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS-4 .word DS1_XPOS+12,DIP_YPOS+109, DS1_XPOS+43,DIP_YPOS+109 .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+12,DIP_YPOS+109 .word DS1_XPOS+43,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS+109 .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS-4 .word DS2_XPOS+12,DIP_YPOS+109, DS2_XPOS+43,DIP_YPOS+109 .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+12,DIP_YPOS+109 .word DS2_XPOS+43,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS+109 .long -1 dipline2 .word DS1_XPOS+45,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+3 .word DS1_XPOS+45,DIP_YPOS+4+5*14, DS1_XPOS+48,DIP_YPOS+4+5*14 .word DS1_XPOS+48,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+4+5*14 .word DS1_XPOS+49,DIP_YPOS-2+3*14, DS1_XPOS+51,DIP_YPOS-2+3*14 .word DS1_XPOS+45,DIP_YPOS+4+6*14, DS1_XPOS+51,DIP_YPOS+4+6*14 .word DS2_XPOS+45,DIP_YPOS+4, DS2_XPOS+51,DIP_YPOS+4 .long -1 country_text .long cntry0,cntry1,cntry2,cntry3 ;4 .long cntry4,cntry5,cntry6,cntry7 ;8 .long cntry8,cntry9,cntry10,cntry11 ;12 .long cntry12,cntry13,cntry14,cntry15 ;16 .long cntry16,cntry17,cntry18,cntry19 ;20 .long cntry20,cntry21,cntry22,cntry23 ;24 .long cntry24,cntry25,cntry26,cntry0 ;28 .long cntry0,cntry0,cntry0,cntry0 ;32 .long cntry0,cntry0,cntry0,cntry0 ;36 .long cntry0,cntry0,cntry0,cntry0 ;40 .long cntry0,cntry0,cntry0,cntry0 ;44 .long cntry0,cntry0,cntry0,cntry0 ;48 .long cntry0,cntry0,cntry0,cntry0 ;52 .long cntry0,cntry0,cntry0,cntry0 ;56 .long cntry0,cntry0,cntry0,cntry0 ;60 .long cntry0,cntry0,cntry0,cntry0 ;64 cntry0 .string "USA 1",0 ;0 cntry1 .string "USA 2",0 ;1 cntry2 .string "USA 3",0 ;2 cntry3 .string "GERMANY 1",0 ;3 cntry4 .string "GERMANY 2",0 ;4 cntry5 .string "GERMANY 3",0 ;5 cntry6 .string "FRANCE 1",0 ;6 cntry7 .string "FRANCE 2",0 ;7 cntry8 .string "FRANCE 3",0 ;8 cntry9 .string "SWISS 1",0 ;9 cntry10 .string "ITALY",0 ;10 cntry11 .string "UK 1",0 ;11 cntry12 .string "UK 2",0 ;12 cntry13 .string "UK ELEC",0 ;13 cntry14 .string "SPAIN 1",0 ;14 cntry15 .string "AUSTRALIA 1",0 ;15 cntry16 .string "JAPAN 1",0 ;16 cntry17 .string "JAPAN 2",0 ;17 cntry18 .string "AUSTRIA 1",0 ;18 cntry19 .string "BELGIUM 1",0 ;19 cntry20 .string "BELGIUM 2",0 ;20 cntry21 .string "SWEDEN",0 ;21 cntry22 .string "NEW ZEALAND",0 ;22 cntry23 .string "NETHERLANDS",0 ;23 cntry24 .string "FINLAND",0 ;24 cntry25 .string "NORWAY",0 ;25 cntry26 .string "DENMARK",0 ;26 DIP_COIN1 .string "CMOS COINAGE",0 DIP_COIN2 .string "DIP COINAGE",0 DIP_TESTSW1 .string "TEST MODE",0 DIP_TESTSW2 .string "GAME MODE",0 DIPMES0 .STRING "DIP SWITCH TEST",0 DIPMES1 .STRING "DS1",0 DIPMES2 .STRING "DS2",0 DIPMES01 .string "1",0 DIPMES02 .string "2",0 DIPMES03 .string "3",0 DIPMES04 .string "4",0 DIPMES05 .string "5",0 DIPMES06 .string "6",0 DIPMES07 .string "7",0 DIPMES08 .string "8",0 DIPMES18 .STRING "1 2 3 4 5 6 7 8",0 DIPON .STRING "ON",0 DIPOFF .STRING "OFF",0 .endif LEFTSLOT .STRING "LEFT",0 .EVEN RIGHTSLOT .STRING "RIGHT",0 .EVEN SERVICE1 .STRING "SERVICE",0 .EVEN SERVICE2 .STRING "CREDIT",0 .EVEN COINMESS1 .STRING "COIN1",0 .EVEN COINMESS2 .STRING "COIN2",0 .EVEN CENTER .STRING "COIN3",0 .EVEN FOURTH .STRING "COIN4",0 .EVEN SLAM .string "SLAM",0 .even VOLUPMESS .string "VOL UP",0 .even VOLDOWNMESS .string "VOL DN",0 .even CDINTERLOCK1 .string "COINDOOR",0 .even CDINTERLOCK2 .string "INTERLOCK",0 .even BILLVALID .string "BILL IN",0 .even TEST .STRING "TEST",0 .EVEN SEC_MESS_1 .string "LEVEL 1 SECURITY CHECK",0 .even SEC_MESS_2 .string "LEVEL 2 SECURITY CHECK FAILURE",0 .even J1MESS .string "JOY1",0 J2MESS .string "JOY2",0 GETOUT2 .STRING "PRESS ANY BUTTON TO EXIT",0 GETOUT1 .STRING "PRESS START 1 AND START 2 TO EXIT",0 .EVEN STSTART .STRING "WRESTLEMANIA SWITCHES",0 .EVEN P1START .STRING "START 1",0 .EVEN P2START .STRING "START 2",0 .EVEN LEFTMESS .STRING "LFT",0 .EVEN RIGHTMESS .STRING "RT",0 .EVEN UPMESS .STRING "UP",0 .EVEN DOWNMESS .STRING "DWN",0 .EVEN P1MOVE .STRING "P1 MOVE",0 .EVEN P2MOVE .STRING "P2 MOVE",0 .EVEN **************************************************************************** * INITCOLR: INITIALIZE COLORS; ROUTINE LOADS PALETTE 0 WITH THE COLOR * * PALETTE USED BY DIAGNOSTIC TESTS. * **************************************************************************** INITCOLR MOVI COLRAM,A0,L ; PALETTE LOCATION MOVI DIAGP,A1,L MOVE *A1+,A2,W ; LENGTH OF PALETTE LPLP1 MOVE *A1+,*A0+,W DSJS A2,LPLP1 ; KEEP ON CHUGGIN, BABY CLR A14 MOVE A14, @CMAPSEL FRET B5 **************************************************************************** * POINT: FUNCTION DISPLAYS A POINT OF ANY COLOR. * * * * ENTRY: A0 = XY SCREEN ADDRESS OF THE POINT * * A1 = COLOR VALUE * * B6 = RETURN ADDRESS * * * * USES: A0, A1, B2, B3, B4, B6, B10 * **************************************************************************** POINT: ADDI SCRXFUDGE,A0 MOVI SCRN_PTCH, DPTCH CLR OFFSET LMO DPTCH, B10 MOVE B10, @CONVDP PIXT A1, *A0.XY FRET B6 **************************************************************************** * RECTANGLE: FUNCTION DISPLAYS A RECTANGLE OF ANY COLOR. * * * * ENTRY: A0 = XY SCREEN ADDRESS OF UPPER LEFT CORNER * * A1 = XY RECTANGLE DIMENSIONS * * A2 = COLOR VALUE * * * * B6 = RETURN ADDRESS * * * * USES: A0, A1, A2, B2, B3, B4, B6, B7, B9, B10 * **************************************************************************** RECTANGLE: ADDI SCRXFUDGE,A0 MOVI SCRN_PTCH, DPTCH CLR OFFSET LMO DPTCH, B10 MOVE B10, @CONVDP MOVE A2, COLOR1 MOVE A0, DADDR MOVE A1, DYDX move a1,@_temporary,L ;Temporary Storage fer these move a2,SADDR move @CONTROL,a1,W move a1,a2 andni 020h,a2 move a2,@CONTROL,W ; Pixel Transparency OFF move a2,a2 FILL XY move a1,@CONTROL,W ; Restore Pixel Transparency move SADDR,a2 ; Restore these reggies move @_temporary,a1,L SUBI SCRXFUDGE,A0 FRET B6 **************************************************************************** * LINE: FUNCTION DRAWS HORIZONTAL OR VERTICAL LINES OF ANY COLOR. * * ENTRY: A0 = BEGINNING XY SCREEN ADDRESS * A1 = ENDING XY SCREEN ADDRESS * A2 = COLOR VALUE * * B6 = RETURN ADDRESS * * USES: A0-A4, B3,B4,B6,B9,B10 **************************************************************************** HVLINE MOVI SCRXFUDGE,A3 ADDXY A3,A0 ADDXY A3,A1 MOVI SCRN_PTCH,DPTCH CLR OFFSET LMO DPTCH,B10 MOVE B10,@CONVDP MOVE A2,COLOR1 MOVK 1, A2 ; DRAV DX: ASSUME HORIZONTAL LINE MOVE A0,A3 ; DETERMINE (P2 > P1) OR (P2 < P1) CVXYL A3,A3 MOVE A1,A4 CVXYL A4,A4 CMP A3,A4 ; IF (P2 < P1) ~(INCREMENT) JRP $100 NEG A2 ; INCREMENT IS A SIGNED WORD ZEXT A2 $100 CMPXY A0,A1 ; IF VERTICAL LINE JRZ $110 ; DRAV DX -> DRAV DY SLL 16,A2 $110 DRAV A2,A0 ; DRAW LINE CMPXY A0,A1 JRNN $110 JRNZ $110 FRET B6 ******************************** * Draw a line * A0=YX Start * A1=YX End * A2=Color * B6=Return addr * Trashes B0-B5,B7-B13 SUBRP line_draw ADDI SCRXFUDGE,A0 ADDI SCRXFUDGE,A1 move a2,COLOR1 movi SCRN_PTCH,DPTCH clr OFFSET ;B4 lmo DPTCH,b0 move b0,@CONVDP move a0,b2 ;YX strt move a1,b10 ;YX end clr b7 ;b:a subxy b2,b10 jrnc bpos jrnv bneg_apos subxy b10,b7 movi -1,b11 jruc cmp_b_a bneg_apos subxy b10,b7 movx b10,b7 movi >ffff0000,b11 jruc cmp_b_a bpos jrnv bpos_apos bpos_aneg subxy b10,b7 movy b10,b7 movi >1ffff,b11 jruc cmp_b_a bpos_apos move b10,b7 movi >10001,b11 cmp_b_a clr b12 move b7,b0 srl 16,b0 clr b10 movx b7,b10 cmp b0,b10 jrgt a_ge_b move b0,b10 movx b7,b0 rl 16,b7 ;Swap b:a movy b11,b12 sll 1,b0 sub b10,b0 addk 1,b10 move b11,b11 jrn line1 line0 line 0 jruc ldx a_ge_b movx b11,b12 sll 1,b0 sub b10,b0 move b11,b11 jrnn line0 line1 line 1 ldx FRET B6 **************************************************************************** * STRING: FUNCTION DISPLAYS AN ASCII STRING OF ANY COLOR EITHER VERTICALLY * OR HORIZONTALLY. * * ENTRY: A0 = STARTING STRING ADDRESS * A1 = Y:X SCREEN ADDRESS * A2 = DIRECTION * A3 = COLOR * * B6 = RETURN ADDRESS * * USES: A0 - A6, B0 - B4, B6 - B14 **************************************************************************** STRNEW1 MMTM SP,A1,A2,A3,A4,A5,A6 FCALL STRING,B6 MMFM SP,A1,A2,A3,A4,A5,A6 RETS STRNEW PUSH a0 CALLR STRNEW1 MMFM SP,A0 RETS STRING ADDI SCRXFUDGE,A1 MOVI SCRN_PTCH,DPTCH CLR OFFSET LMO DPTCH,B10 MOVE B10,@CONVDP MOVE A3,COLOR1 CLR COLOR0 $200 MOVB *A0,A4 ;GET CHARACTER JRZ $230 ;QUIT IF NULL ADDK 8,A0 SUBK 32,A4 ;GET POINTER TO CHARACTER HEADER SLL 3,A4 ADDI SYSFONT,A4,L MOVB *A4,A4 SLL 5,A4 ADDI T2_SP,A4 MOVE *A4+,A5 ;CHAR DIMENSIONS MOVE A5,A6 ;SPLIT UP BYTE SLL 12,A6 ;SHIFT UP HEIGHT TO Y SLL 28,A5 ;STRIP AWAY HEIGHT SRL 28,A5 MOVY A6,A5 RL 16,A5 MOVE A5,DYDX CLR A6 ;A6 = CHAR WIDTH MOVX A5,A6 ADDK 7, A6 ;ROUND UP WIDTH TO INTEGRAL NUMBER SRL 3, A6 ;OF BYTES = SOURCE PITCH SLL 3, A6 MOVE A6,SPTCH MOVE *A4,A6 ;CHAR DATA ADDI CBASE,A6 MOVE A6,SADDR MOVE A1,DADDR PIXBLT B,XY CLR A6 MOVE A2,A2 JRZ $210 MOVY A5,A6 ;A1 += (CHAR HEIGHT + SPACING) SRL 16,A6 ;DIRECTION = DOWN ADDK 1,A6 SLL 16,A6 ADD A6,A1 JRUC $200 $210 MOVX A5,A6 ;A1 += (CHAR WIDTH + SPACING) ADDK 2,A6 ;DIRECTION = RIGHT ADD A6,A1 JRUC $200 $230 ;SETF 16, 1, 0 FRET B6 STRINGCENTER: SETF 8, 0, 0 CLR A1 MOVE A0,A2 SPLLOOP MOVE *A0+, A4 ; GET THE CHAR JRZ SPLEND ; END OF STRING SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER SLL 3,A4 ADDI SYSFONT,A4,L MOVB *A4,A4 SLL 5,A4 ADDI T2_SP,A4 MOVE *A4+, A5, 1 ; CHAR DIMENSIONS ZEXT A5 SRL 4,A5 ; GET JUST THE X DIMENSION ADDK 2H, A5 ; GIVE IN TO SPACING ADD A5, A1 JRUC SPLLOOP SPLEND SETF 16, 1, 0 MOVE A2,A0 ; RESTORE STRING ADDRESS SRL 1,A1 MOVI 200,A2 SUB A1,A2 MOVE A2,A1 FRET B6 ;**************************************************************************** ;* CIRCLE: FUNCTION DRAWS OUTLINE OR FILLED CIRCLES. * ;* * ;* ENTRY: A0 = radius * ;* A1 = center (Y:X) * ;* A6 = <00:15> = color * ;* A6 = <15:31> = fill: 0=no fill, 1=fill * ;* * ;* USES: A0 - A8, B0, B10 * ;**************************************************************************** CIRCLE ADDI SCRXFUDGE,A1 movi plot8,a7 ; assume no fill btst 16,a6 jrz CIRC0 movi fill4,a7 CIRC0 movi SCRN_PTCH,DPTCH ;Restore screen pitch and convdp movk >13,b10 ;this is faster MOVE B10,@CONVDP MOVE A6,COLOR1 movi [1,0],DYDX ; Y width always 1 clr a2 ; x = 0 move a0,a3 ; y = r move a0,a4 sll 1,a4 subk 3,a4 neg a4 ; d = 3 - 2*r cloop cmp a3,a2 ; if x > y, we are done jrgt done MOVE A7,B0 ; PLOT ROUTINE EXGPC B0 move a2,a5 ; x -> a5 btst 31,a4 jrz dpos ; branch if d is positive sll 2,a5 ; 4*x -> a5 addk 6,a5 ; 4*x+6 -> a5 jruc cont dpos sub a3,a5 ; x-y -> a5 sll 2,a5 ; 4*(x-y) -> a5 addk 10,a5 ; 4*(x-y)+10 -> a5 subk 1,a3 ; y = y - 1 cont add a5,a4 ; d = d + a5 addk 1,a2 ; x = x + 1 jruc cloop done FRET B6 plot8 move a3,a5 neg a5 ; -y into a5; +y in a3 sll 16,a5 sll 16,a3 movx a2,a5 ; a3 = (y:x) movx a2,a3 ; a5 = (-y:x) movk 2,a8 put4 move a1,a0 ; center (Y:X) in a0 addxy a3,a0 ; (cx+x),(cy+y) pixt a6,*a0.XY move a1,a0 ; center (Y:X) in a0 addxy a5,a0 ; (cx+x),(cy-y) pixt a6,*a0.XY move a1,a0 ; center (Y:X) in a0 subxy a3,a0 ; (cx-x),(cy-y) pixt a6,*a0.XY move a1,a0 ; center (Y:X) in a0 subxy a5,a0 ; (cx-x),(cy+y) pixt A6,*a0.XY rl 16,a3 rl 16,a5 ; transpose x and y dsj a8,put4 sra 16,a3 ; restore y FRET B0 fill4: move a2,b10 ; x sll 1,b10 ; 2x movx b10,DYDX ; delta x = 2x move a3,a5 neg a5 ; -y into a5 +y in a3 sll 16,a5 sll 16,a3 movx a2,a5 ; a3 = (y:x) movx a2,a3 ; a5 = (-y:x) movk 2,a8 put2: move a1,a0 subxy a5,a0 move a0,DADDR fill XY move a1,a0 subxy a3,a0 move a0,DADDR fill XY rl 16,a3 ; a3 = (x:y) rl 16,a5 ; transpose x and y clr a6 subxy a5,a6 move a6,a5 ; a5 = (-x:y) move a3,b10 ; y sll 1,b10 ; 2y movx b10,DYDX ; delta x = 2y dsj a8,put2 sra 16,a3 ; restore y FRET B0 ******************************** *SCRCLR - CLEAR ENTIRE BIT MAP * USES:B2,B3,B4 CALL WITH B6 DSCRCLR CLR B2 DSWRITE CLR B3 MOVE B3,@DMACMAP,0 MOVI SCREEN,B3,L MOVI (SCRNE-SCREEN)/32,B4,L SCRLP MOVE B2,*B3+,L DSJS B4,SCRLP FRET B6 ************************************************************************** * * * CPU BOARD INFORMATION * * * ************************************************************************** CPU_VECS: VECMAC COLOR_WHITE,5,5,5,243 ; BOARD OUTLINE VECMAC COLOR_WHITE,5,243,390,243 VECMAC COLOR_WHITE,390,243,390,5 VECMAC COLOR_WHITE,390,5,355,5 VECMAC COLOR_WHITE,355,5,355,10 VECMAC COLOR_WHITE,355,10,343,10 VECMAC COLOR_WHITE,343,10,343,5 VECMAC COLOR_WHITE,343,5,326,5 VECMAC COLOR_WHITE,326,5,326,10 VECMAC COLOR_WHITE,326,10,323,10 VECMAC COLOR_WHITE,323,10,323,5 VECMAC COLOR_WHITE,323,5,212,5 VECMAC COLOR_WHITE,212,5,212,10 VECMAC COLOR_WHITE,212,10,200,10 VECMAC COLOR_WHITE,200,10,200,5 VECMAC COLOR_WHITE,200,5,5,5 .LONG 0 CPUXBASE EQU 5 CPUYBASE EQU 5 CPU_CHIPS: CRAM1 CHIPMAC 0,347,152,30,13,5,3,CNAMEU36,0,28,2,1 ; COLOR RAM (U36) CRAM2 CHIPMAC 1,313,152,30,13,5,3,CNAMEU37,0,28,2,1 ; COLOR RAM (U37) VRAM1 CHIPMAC 2,347,207,38,13,8,3,CNAMEU14,0,36,2,1 ; BANK 1 VIDEO RAM (U14) VRAM2 CHIPMAC 3,307,207,38,13,8,3,CNAMEU15,0,36,2,1 ; (PALETTE) (U15) VRAM3 CHIPMAC 4,267,207,38,13,8,3,CNAMEU16,0,36,2,1 ; (U16) VRAM4 CHIPMAC 5,227,207,38,13,8,3,CNAMEU17,0,36,2,1 ; (U17) VRAM5 CHIPMAC 6,347,225,38,13,8,3,CNAMEU10,0,36,2,1 ; BANK 2 VIDEO RAM (U10) VRAM6 CHIPMAC 7,307,225,38,13,8,3,CNAMEU11,0,36,2,1 ; (PIXEL) (U11) VRAM7 CHIPMAC 8,267,225,38,13,8,3,CNAMEU12,0,36,2,1 ; (U12) VRAM8 CHIPMAC 9,227,225,38,13,8,3,CNAMEU13,0,36,2,1 ; (U13) CPU CHIPMAC 0,330,50,35,35,7,13,CNAMEU59,0,3,3,1 ; CPU (U59) DMA CHIPMAC 0,246,157,38,38,8,16,CNAMEU33,0,3,3,1 ; DMA (U33) PROM1 CHIPMAC 1,220,65,40,13,9,3,CNAMEU63,0,38,2,1 ; PROGRAM ROM 1 (U63) PROM2 CHIPMAC 0,220,83,40,13,9,3,CNAMEU54,0,38,2,1 ; PROGRAM ROM 2 (U54) IROM1 CHIPMAC 1,10,122,40,13,6,3, CNAMEU133,0,38,2,1 ; IMAGE ROM (U133) IROM2 CHIPMAC 2,52,122,40,13,6,3, CNAMEU132,0,38,2,1 ; IMAGE ROM (U132) IROM3 CHIPMAC 3,94,122,40,13,6,3, CNAMEU131,0,38,2,1 ; IMAGE ROM (U131) IROM4 CHIPMAC 4,136,122,40,13,6,3, CNAMEU130,0,38,2,1 ; IMAGE ROM (U130) IROM5 CHIPMAC 5,10,137,40,13,6,3, CNAMEU129,0,38,2,1 ; IMAGE ROM (U129) IROM6 CHIPMAC 6,52,137,40,13,6,3, CNAMEU128,0,38,2,1 ; IMAGE ROM (U128) IROM7 CHIPMAC 7,94,137,40,13,6,3, CNAMEU127,0,38,2,1 ; IMAGE ROM (U127) IROM8 CHIPMAC 8,136,137,40,13,6,3, CNAMEU126,0,38,2,1 ; IMAGE ROM (U126) IROM9 CHIPMAC 9,10,152,40,13,6,3, CNAMEU125,0,38,2,1 ; IMAGE ROM (U125) IROM10 CHIPMAC 10,52,152,40,13,6,3, CNAMEU124,0,38,2,1 ; IMAGE ROM (U124) IROM11 CHIPMAC 11,94,152,40,13,6,3, CNAMEU123,0,38,2,1 ; IMAGE ROM (U123) IROM12 CHIPMAC 12,136,152,40,13,6,3,CNAMEU122,0,38,2,1 ; IMAGE ROM (U122) IROM13 CHIPMAC 13,10,167,40,13,6,3, CNAMEU121,0,38,2,1 ; IMAGE ROM (U121) IROM14 CHIPMAC 14,52,167,40,13,6,3, CNAMEU120,0,38,2,1 ; IMAGE ROM (U120) IROM15 CHIPMAC 15,94,167,40,13,6,3, CNAMEU119,0,38,2,1 ; IMAGE ROM (U119) IROM16 CHIPMAC 16,136,167,40,13,6,3,CNAMEU118,0,38,2,1 ; IMAGE ROM (U118) IROM17 CHIPMAC 17,10,182,40,13,6,3, CNAMEU117,0,38,2,1 ; IMAGE ROM (U117) IROM18 CHIPMAC 18,52,182,40,13,6,3, CNAMEU116,0,38,2,1 ; IMAGE ROM (U116) IROM19 CHIPMAC 19,94,182,40,13,6,3, CNAMEU115,0,38,2,1 ; IMAGE ROM (U115) IROM20 CHIPMAC 20,136,182,40,13,6,3,CNAMEU114,0,38,2,1 ; IMAGE ROM (U114) IROM21 CHIPMAC 21,10,197,40,13,6,3, CNAMEU113,0,38,2,1 ; IMAGE ROM (U113) IROM22 CHIPMAC 22,52,197,40,13,6,3, CNAMEU112,0,38,2,1 ; IMAGE ROM (U112) IROM23 CHIPMAC 23,94,197,40,13,6,3, CNAMEU111,0,38,2,1 ; IMAGE ROM (U111) IROM24 CHIPMAC 24,136,197,40,13,6,3,CNAMEU110,0,38,2,1 ; IMAGE ROM (U110) IROM25 CHIPMAC 25,10,212,40,13,6,3, CNAMEU109,0,38,2,1 ; IMAGE ROM (U109) IROM26 CHIPMAC 26,52,212,40,13,6,3, CNAMEU108,0,38,2,1 ; IMAGE ROM (U108) IROM27 CHIPMAC 27,94,212,40,13,6,3, CNAMEU107,0,38,2,1 ; IMAGE ROM (U107) IROM28 CHIPMAC 28,136,212,40,13,6,3,CNAMEU106,0,38,2,1 ; IMAGE ROM (U106) IROM29 CHIPMAC 29,10,227,40,13,6,3, CNAMEU105,0,38,2,1 ; IMAGE ROM (U105) IROM30 CHIPMAC 30,52,227,40,13,6,3, CNAMEU104,0,38,2,1 ; IMAGE ROM (U104) IROM31 CHIPMAC 31,94,227,40,13,6,3, CNAMEU103,0,38,2,1 ; IMAGE ROM (U103) IROM32 CHIPMAC 32,136,227,40,13,6,3,CNAMEU102,0,38,2,1 ; IMAGE ROM (U102) SRAM1 CHIPMAC 0,225,101,30,13,4,3,CNAMEU49,0,28,2,1 ; SCRATCH PAD (U49) PIC CHIPMAC 0,177,65,40,13,9,3,CNAMEU64,0,38,2,1 ; PIC CHIP (U64) SROM1 CHIPMAC 1,49,57,40,13,14,3, CNAMEU2,0,38,2,1 ; Sound Rom (U2) SROM2 CHIPMAC 2,49,72,40,13,14,3, CNAMEU3,0,38,2,1 ; Sound Rom (U3) SROM3 CHIPMAC 3,49,87,40,13,14,3, CNAMEU4,0,38,2,1 ; Sound Rom (U4) SROM4 CHIPMAC 4,49,102,40,13,14,3,CNAMEU5,0,38,2,1 ; Sound Rom (U5) SROM5 CHIPMAC 5,7,57,40,13,14,3, CNAMEU6,0,38,2,1 ; Sound Rom (U6) SROM6 CHIPMAC 6,7,72,40,13,14,3, CNAMEU7,0,38,2,1 ; Sound Rom (U7) SROM7 CHIPMAC 7,7,87,40,13,14,3, CNAMEU8,0,38,2,1 ; Sound Rom (U8) SROM8 CHIPMAC 8,7,102,40,13,14,3, CNAMEU9,0,38,2,1 ; Sound Rom (U9) DSP CHIPMAC 0,118,77,35,35,13,13,CNAMEU1,0,3,3,1 ; Sound DSP (U1) SNDRAM1 CHIPMAC 1,115,29,40,13,9,3,CNAMEU86,0,38,2,1 ; Sound Ram 1 (U86) SNDRAM2 CHIPMAC 2,115,44,40,13,9,3,CNAMEU80,0,38,2,1 ; Sound Ram 2 (U80) SNDRAM3 CHIPMAC 3,115,59,40,13,9,3,CNAMEU73,0,38,2,1 ; Sound Ram 3 (U73) .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 IROM17,IROM18,IROM19,IROM20 .long IROM21,IROM22,IROM23,IROM24 .long IROM25,IROM26,IROM27,IROM28 .long IROM29,IROM30,IROM31,IROM32 .LONG 0 ;SRAMTAB .LONG SRAM1,SRAM2,SRAM3,SRAM4 SRAMTAB .LONG SRAM1 .LONG 0 SROMTAB .long SROM1, SROM2, SROM3, SROM4 .long 0 SNDRAMTAB .long SNDRAM1, SNDRAM2, SNDRAM3 .long 0 CNAMEU1 .string "U1",0 .even CNAMEU2 .string "U2",0 .even CNAMEU3 .string "U3",0 .even CNAMEU4 .string "U4",0 .even CNAMEU5 .string "U5",0 .even CNAMEU6 .string "U6",0 .even CNAMEU7 .string "U7",0 .even CNAMEU8 .string "U8",0 .even CNAMEU9 .string "U9",0 .even CNAMEU10 .string "U10",0 .even CNAMEU11 .string "U11",0 .even CNAMEU12 .string "U12",0 .even CNAMEU13 .string "U13",0 .even CNAMEU14 .string "U14",0 .even CNAMEU15 .string "U15",0 .even CNAMEU16 .string "U16",0 .even CNAMEU17 .string "U17",0 .even CNAMEU33 .string "U33",0 .even CNAMEU36 .string "U36",0 .even CNAMEU37 .string "U37",0 .even CNAMEU49 .string "U49",0 .even CNAMEU54 .string "U54",0 .even CNAMEU59 .string "U59",0 .even CNAMEU63 .string "U63",0 .even CNAMEU64 .string "U64",0 .even CNAMEU73 .string "U73",0 .even CNAMEU80 .string "U80",0 .even CNAMEU86 .string "U86",0 .even CNAMEU133 .string "U133",0 .even CNAMEU132 .string "U132",0 .even CNAMEU131 .string "U131",0 .even CNAMEU130 .string "U130",0 .even CNAMEU129 .string "U129",0 .even CNAMEU128 .string "U128",0 .even CNAMEU127 .string "U127",0 .even CNAMEU126 .string "U126",0 .even CNAMEU125 .string "U125",0 .even CNAMEU124 .string "U124",0 .even CNAMEU123 .string "U123",0 .even CNAMEU122 .string "U122",0 .even CNAMEU121 .string "U121",0 .even CNAMEU120 .string "U120",0 .even CNAMEU119 .string "U119",0 .even CNAMEU118 .string "U118",0 .even CNAMEU117 .string "U117",0 .even CNAMEU116 .string "U116",0 .even CNAMEU115 .string "U115",0 .even CNAMEU114 .string "U114",0 .even CNAMEU113 .string "U113",0 .even CNAMEU112 .string "U112",0 .even CNAMEU111 .string "U111",0 .even CNAMEU110 .string "U110",0 .even CNAMEU109 .string "U109",0 .even CNAMEU108 .string "U108",0 .even CNAMEU107 .string "U107",0 .even CNAMEU106 .string "U106",0 .even CNAMEU105 .string "U105",0 .even CNAMEU104 .string "U104",0 .even CNAMEU103 .string "U103",0 .even CNAMEU102 .string "U102",0 .even ************************************************************************** * * * RAM CHIP DATA * * * ************************************************************************** ; ; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE ; VRAMCHIPS: ; COLOR RAMS RAM_CHIP 0,1, 8, 16, 1880000H, 18FFFF0H ; U37 ( 0 - 7 ) RAM_CHIP 0,0, 7, 16, 1880008H, 18FFFF8H ; U36 ( 8 - 14 ) ; VIDEO RAMS RAM_CHIP 0, 8, 8, 32, 0000018H, 03FFFF8H ; U12 RAM_CHIP 0, 4, 8, 32, 0000010H, 03FFFF0H ; U16 RAM_CHIP 0, 9, 8, 32, 0000008H, 03FFFE8H ; U13 RAM_CHIP 0, 5, 8, 32, 0000000H, 03FFFE0H ; U17 .LONG 0 PALCHIPS: ; VIDEO PALETTE RAMS RAM_CHIP 0,6, 8, 32, 0000018H, 03FFFF8H ; U10 RAM_CHIP 0,2, 8, 32, 0000010H, 03FFFF0H ; U14 RAM_CHIP 0,7, 8, 32, 0000008H, 03FFFE8H ; U11 RAM_CHIP 0,3, 8, 32, 0000000H, 03FFFE0H ; U15 .LONG 0 ; SCRATCH RAMS SRAMCHECK .STRING "CHECKING SCRATCH RAMS",0 .EVEN SRAMCHIPS RAM_CHIP SRAM1,0, 16, 16, 1000000H, 13FFFF0H ; U49 (0-15) .LONG 0 **************************************************************************** * SYSFONT: SYSTEM FONT; MODULE DEFINES THE FONT USED WITH SYSTEM * * DIAGNOSTICS. * **************************************************************************** ; =========================== ; | DYDX CHAR DIMENSIONS | ; | POINTER TO XY CHAR DATA | ; =========================== T2_SP .WORD 048h .word I2_SP-CBASE T2_MN .WORD 088h .WORD I2_MN-CBASE T2_PER .WORD 028H .WORD I2_PER-CBASE T2_SLASH .WORD 068H .WORD I2_SLASH-CBASE T2_00 .WORD 068h .WORD I2_00-CBASE T2_11: .WORD 068h .WORD I2_11-CBASE T2_22: .WORD 068h .WORD I2_22-CBASE T2_33: .WORD 068h .WORD I2_33-CBASE T2_44: .WORD 068h .WORD I2_44-CBASE T2_55: .WORD 068h .WORD I2_55-CBASE T2_66: .WORD 068h .WORD I2_66-CBASE T2_77: .WORD 068h .WORD I2_77-CBASE T2_88: .WORD 068h .WORD I2_88-CBASE T2_99: .WORD 068h .WORD I2_99-CBASE T2_AA: .WORD 068h .WORD I2_AA-CBASE T2_BB: .WORD 068h .WORD I2_BB-CBASE T2_CC: .WORD 068h .WORD I2_CC-CBASE T2_DD: .WORD 068h .WORD I2_DD-CBASE T2_EE: .WORD 068h .WORD I2_EE-CBASE T2_FF: .WORD 068h .WORD I2_FF-CBASE T2_GG: .WORD 068h .WORD I2_GG-CBASE T2_HH: .WORD 068h .WORD I2_HH-CBASE T2_II: .WORD 028h .WORD I2_II-CBASE T2_JJ: .WORD 068h .WORD I2_JJ-CBASE T2_KK: .WORD 068h .WORD I2_KK-CBASE T2_LL: .WORD 058h .WORD I2_LL-CBASE T2_MM: .WORD 0A8h .WORD I2_MM-CBASE T2_NN: .WORD 078h .WORD I2_NN-CBASE T2_OO: .WORD 078h .WORD I2_OO-CBASE T2_PP: .WORD 068h .WORD I2_PP-CBASE T2_QQ: .WORD 07Ah .WORD I2_QQ-CBASE T2_RR: .WORD 068h .WORD I2_RR-CBASE T2_SS: .WORD 068h .WORD I2_SS-CBASE T2_TT: .WORD 068h .WORD I2_TT-CBASE T2_UU: .WORD 068h .WORD I2_UU-CBASE T2_VV: .WORD 078h .WORD I2_VV-CBASE T2_WW: .WORD 0B8h .WORD I2_WW-CBASE T2_XX: .WORD 078h .WORD I2_XX-CBASE T2_YY: .WORD 068h .WORD I2_YY-CBASE T2_ZZ: .WORD 068h .WORD I2_ZZ-CBASE ; =========================== ; | CHARACTER DIRECTORY | ; =========================== SYSFONT .BYTE (T2_SP-T2_SP)/32 ;SPACE CHARACTER, " " .BYTE (T2_SP-T2_SP)/32 ;FILLER .BYTE (T2_SP-T2_SP)/32 .BYTE (T2_SP-T2_SP)/32 .BYTE (T2_SP-T2_SP)/32 .BYTE (T2_SP-T2_SP)/32 .BYTE (T2_SP-T2_SP)/32 .BYTE (T2_SP-T2_SP)/32 .BYTE (T2_SP-T2_SP)/32 .BYTE (T2_SP-T2_SP)/32 .BYTE (T2_SP-T2_SP)/32 .BYTE (T2_SP-T2_SP)/32 .BYTE (T2_SP-T2_SP)/32 .BYTE (T2_MN-T2_SP)/32 ; MINUS CHARACTER, "-" .BYTE (T2_PER-T2_SP)/32 .BYTE (T2_SLASH-T2_SP)/32 ; "/" .BYTE (T2_00-T2_SP)/32 ;0 .BYTE (T2_11-T2_SP)/32 ;1 .BYTE (T2_22-T2_SP)/32 ;2 .BYTE (T2_33-T2_SP)/32 ;3 .BYTE (T2_44-T2_SP)/32 ;4 .BYTE (T2_55-T2_SP)/32 ;5 .BYTE (T2_66-T2_SP)/32 ;6 .BYTE (T2_77-T2_SP)/32 ;7 .BYTE (T2_88-T2_SP)/32 ;8 .BYTE (T2_99-T2_SP)/32 ;9 .BYTE (T2_00-T2_SP)/32 ; no : .BYTE (T2_00-T2_SP)/32 ; no ; .BYTE (T2_00-T2_SP)/32 ; no < .BYTE (T2_00-T2_SP)/32 ; no = .BYTE (T2_00-T2_SP)/32 ; no > .BYTE (T2_00-T2_SP)/32 ; no ? .BYTE (T2_00-T2_SP)/32 ; no @ .BYTE (T2_AA-T2_SP)/32 ;A .BYTE (T2_BB-T2_SP)/32 ;B .BYTE (T2_CC-T2_SP)/32 ;C .BYTE (T2_DD-T2_SP)/32 ;D .BYTE (T2_EE-T2_SP)/32 ;E .BYTE (T2_FF-T2_SP)/32 ;F .BYTE (T2_GG-T2_SP)/32 ;G .BYTE (T2_HH-T2_SP)/32 ;H .BYTE (T2_II-T2_SP)/32 ;I .BYTE (T2_JJ-T2_SP)/32 ;J .BYTE (T2_KK-T2_SP)/32 ;K .BYTE (T2_LL-T2_SP)/32 ;L .BYTE (T2_MM-T2_SP)/32 ;M .BYTE (T2_NN-T2_SP)/32 ;N .BYTE (T2_OO-T2_SP)/32 ;O .BYTE (T2_PP-T2_SP)/32 ;P .BYTE (T2_QQ-T2_SP)/32 ;Q .BYTE (T2_RR-T2_SP)/32 ;R .BYTE (T2_SS-T2_SP)/32 ;S .BYTE (T2_TT-T2_SP)/32 ;T .BYTE (T2_UU-T2_SP)/32 ;U .BYTE (T2_VV-T2_SP)/32 ;V .BYTE (T2_WW-T2_SP)/32 ;W .BYTE (T2_XX-T2_SP)/32 ;X .BYTE (T2_YY-T2_SP)/32 ;Y .BYTE (T2_ZZ-T2_SP)/32 ;Z ; =========================== ; | CHARACTER DEFINITIONS | ; =========================== CBASE I2_SP .byte 00h .byte 00h .byte 00h .byte 00h .byte 00h .byte 00h .byte 00h .byte 00h I2_MN: .byte 000h .byte 000h .byte 000h .byte 0FFh .byte 0FFh .byte 000h .byte 000h .byte 000h I2_PER: .BYTE 0 .BYTE 0 .BYTE 0 .BYTE 0 .BYTE 0 .BYTE 0 .BYTE 0FFH .BYTE 0FFH I2_SLASH: .BYTE 30H .BYTE 30H .BYTE 18H .BYTE 18H .BYTE 06H .BYTE 06H .BYTE 03H .BYTE 03H I2_00: .byte 01Eh .byte 03Fh .byte 033h .byte 033h .byte 033h .byte 033h .byte 03Fh .byte 01Eh I2_11: .byte 0Eh .byte 0Fh .byte 0Fh .byte 0Ch .byte 0Ch .byte 0Ch .byte 0Ch .byte 0Ch I2_22: .byte 01Fh .byte 03Fh .byte 038h .byte 01Ch .byte 0Eh .byte 07h .byte 03Fh .byte 03Fh I2_33: .byte 01Fh .byte 03Fh .byte 030h .byte 01Eh .byte 01Eh .byte 030h .byte 03Fh .byte 01Fh I2_44: .byte 038h .byte 03Ch .byte 036h .byte 033h .byte 03Fh .byte 03Fh .byte 030h .byte 030h I2_55: .byte 03Fh .byte 03Fh .byte 03h .byte 01Fh .byte 03Fh .byte 030h .byte 03Fh .byte 01Fh I2_66: .byte 03Eh .byte 03Fh .byte 03h .byte 01Fh .byte 03Fh .byte 033h .byte 03Fh .byte 01Eh I2_77: .byte 03Fh .byte 03Fh .byte 030h .byte 018h .byte 018h .byte 0Ch .byte 0Ch .byte 0Ch I2_88: .byte 01Eh .byte 03Fh .byte 033h .byte 01Eh .byte 01Eh .byte 033h .byte 03Fh .byte 01Eh I2_99: .byte 01Eh .byte 03Fh .byte 033h .byte 03Fh .byte 03Eh .byte 030h .byte 03Fh .byte 01Fh I2_AA: .byte 01Eh .byte 03Fh .byte 033h .byte 033h .byte 03Fh .byte 03Fh .byte 033h .byte 033h I2_BB: .byte 01Fh .byte 03Fh .byte 033h .byte 03Fh .byte 01Fh .byte 033h .byte 03Fh .byte 01Fh I2_CC: .byte 03Eh .byte 03Fh .byte 03h .byte 03h .byte 03h .byte 03h .byte 03Fh .byte 03Eh I2_DD: .byte 01Fh .byte 03Fh .byte 033h .byte 033h .byte 033h .byte 033h .byte 03Fh .byte 01Fh I2_EE: .byte 03Fh .byte 03Fh .byte 03h .byte 03Fh .byte 03Fh .byte 03h .byte 03Fh .byte 03Fh I2_FF: .byte 03Fh .byte 03Fh .byte 03h .byte 03Fh .byte 03Fh .byte 03h .byte 03h .byte 03h I2_GG: .byte 03Eh .byte 03Fh .byte 03h .byte 03h .byte 033h .byte 033h .byte 03Fh .byte 01Eh I2_HH: .byte 033h .byte 033h .byte 033h .byte 03Fh .byte 03Fh .byte 033h .byte 033h .byte 033h I2_II: .byte 03h .byte 03h .byte 03h .byte 03h .byte 03h .byte 03h .byte 03h .byte 03h I2_JJ: .byte 030h .byte 030h .byte 030h .byte 030h .byte 030h .byte 033h .byte 03Fh .byte 01Eh I2_KK: .byte 033h .byte 033h .byte 01Bh .byte 0Fh .byte 01Fh .byte 033h .byte 033h .byte 033h I2_LL: .byte 03h .byte 03h .byte 03h .byte 03h .byte 03h .byte 03h .byte 01Fh .byte 01Fh I2_MM: .byte 087h,03h .byte 0CFh,03h .byte 0CFh,03h .byte 07Bh,03h .byte 07Bh,03h .byte 033h,03h .byte 033h,03h .byte 033h,03h I2_NN: .byte 063h .byte 067h .byte 06Fh .byte 06Fh .byte 07Bh .byte 07Bh .byte 073h .byte 063h I2_OO: .byte 03Eh .byte 07Fh .byte 063h .byte 063h .byte 063h .byte 063h .byte 07Fh .byte 03Eh I2_PP: .byte 01Fh .byte 03Fh .byte 033h .byte 03Fh .byte 01Fh .byte 03h .byte 03h .byte 03h I2_QQ: .byte 03Eh .byte 07Fh .byte 063h .byte 063h .byte 063h .byte 063h .byte 07Fh .byte 03Eh .byte 060h .byte 060h I2_RR: .byte 01Fh .byte 03Fh .byte 033h .byte 03Fh .byte 01Fh .byte 033h .byte 033h .byte 033h I2_SS: .byte 03Eh .byte 03Fh .byte 03h .byte 01Fh .byte 03Eh .byte 030h .byte 03Fh .byte 01Fh I2_TT: .byte 03Fh .byte 03Fh .byte 0Ch .byte 0Ch .byte 0Ch .byte 0Ch .byte 0Ch .byte 0Ch I2_UU: .byte 033h .byte 033h .byte 033h .byte 033h .byte 033h .byte 033h .byte 03Fh .byte 01Eh I2_VV: .byte 063h .byte 063h .byte 063h .byte 036h .byte 036h .byte 03Eh .byte 01Ch .byte 01Ch I2_WW: .byte 023h,06h .byte 023h,06h .byte 073h,06h .byte 076h,03h .byte 076h,03h .byte 0DEh,03h .byte 08Ch,01h .byte 08Ch,01h I2_XX: .byte 063h .byte 063h .byte 036h .byte 01Ch .byte 01Ch .byte 036h .byte 063h .byte 063h I2_YY: .byte 033h .byte 033h .byte 01Eh .byte 01Eh .byte 0Ch .byte 0Ch .byte 0Ch .byte 0Ch I2_ZZ: .byte 03Fh .byte 03Fh .byte 038h .byte 01Ch .byte 0Eh .byte 07h .byte 03Fh .byte 03Fh .EVEN * * ROM chip definitions and checksums * CKSUM1 .equ >8a5d ;9bd5 CKSUM2 .equ >9efe ;3bf0 PROMCHIPS ROM_CHIP PROM2,1,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; U54 ROM_CHIP PROM1,0,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; U63 .LONG 0 * CHECKSUM PATCHES .WORD >ffff-CKSUM1 ;1'S COMPLEMENT OF THE UJ12 CHECKSUM .WORD >ffff-CKSUM2 ;1'S COMPLEMENT OF THE UG12 CHECKSUM ************************************************************************** * * * 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 IROMCHIPS_8MEG .EVEN ROM_CHIP IROM1, 0, 8,32, 2000000H, 3FFFFE0H,03A18H ; U133 ROM_CHIP IROM2, 1, 8,32, 2000008H, 3FFFFE8H,05B68H ; U132 ROM_CHIP IROM3, 2, 8,32, 2000010H, 3FFFFF0H,0A478H ; U131 ROM_CHIP IROM4, 3, 8,32, 2000018H, 3FFFFF8H,0E4EAH ; U130 ROM_CHIP IROM5, 4, 8,32, 4000000H, 5FFFFE0H,00B0EH ; U129 ROM_CHIP IROM6, 5, 8,32, 4000008H, 5FFFFE8H,0E646H ; U128 ROM_CHIP IROM7, 6, 8,32, 4000010H, 5FFFFF0H,074A7H ; U127 ROM_CHIP IROM8, 7, 8,32, 4000018H, 5FFFFF8H,037FDH ; U126 .LONG 0 IROMCHIPS1_8MEG ROM_CHIP IROM9, 8, 8,32, 2000000H, 3FFFFE0H,05EF3H ; U125 ROM_CHIP IROM10, 9, 8,32, 2000008H, 3FFFFE8H,08CD6H ; U124 ROM_CHIP IROM11,10, 8,32, 2000010H, 3FFFFF0H,070ECH ; U123 ROM_CHIP IROM12,11, 8,32, 2000018H, 3FFFFF8H,02B4EH ; U122 ROM_CHIP IROM13,12, 8,32, 4000000H, 5FFFFE0H,05E15H ; U121 ROM_CHIP IROM14,13, 8,32, 4000008H, 5FFFFE8H,00572H ; U120 ROM_CHIP IROM15,14, 8,32, 4000010H, 5FFFFF0H,07FD4H ; U119 ROM_CHIP IROM16,15, 8,32, 4000018H, 5FFFFF8H,0E4F1H ; U118 .LONG 0 ****************************************************************************** .end