1192 lines
22 KiB
NASM
Executable File
1192 lines
22 KiB
NASM
Executable File
.FILE "MEMTEST.ASM"
|
|
*----------------------------------------------------------------------------
|
|
*MEMTEST.ASM
|
|
*
|
|
*COPYRIGHT (C) 1994 BY TV GAMES, INC.
|
|
*ALL RIGHTS RESERVED
|
|
*
|
|
*CHIP TEST ROUTINES
|
|
*
|
|
*
|
|
*MEMORY WAIT STATE ACCESS NOTES
|
|
*
|
|
*NORMAL=WAIT STATES SET TO SW=2 OR HARDWARE WHICHEVER RELEASES FIRST
|
|
*FOR COLOR RAM SET T0 SW=1 OR HARDWARE WHICHEVER RELEASES FIRST
|
|
*FOR BITMAP OR WAVERAM MODE HARDWARE ONLY
|
|
*AFTER BITMAP READ, READ 0 AFTERWARD TO RESET HDWE.
|
|
*FOR A-D SET WAIT TO SW=4 ONLY
|
|
*
|
|
|
|
.include C30.EQU
|
|
.include VUNIT.EQU
|
|
.include CMOS.EQU
|
|
.include MACS.EQU
|
|
.include SYS.EQU
|
|
.include DIAG.EQU
|
|
.include CKSUM.EQU
|
|
.include GLOBALS.EQU
|
|
|
|
.include CHECKSUM.EQU
|
|
;CHECKSUM_GEN .set 1
|
|
|
|
|
|
.text
|
|
*----------------------------------------------------------------------------
|
|
RANDI .word 5A5A5A5Ah
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*ROM CHIP DEFINES
|
|
* .word START_ADDR,LENGTH,MASK,SHIFT,CHKSUM_PTR
|
|
|
|
romdata
|
|
|
|
;EPROM
|
|
RTU26 .word 0E00000h,080000h,0000000FFh,0,CHKSUME00
|
|
RTU22 .word 0D80000h,080000h,0000000FFh,0,CHKSUMD80
|
|
RTU18 .word 0D00000h,080000h,0000000FFh,0,CHKSUMD00
|
|
RTU14 .word 0C80000h,080000h,0000000FFh,0,CHKSUMC80
|
|
RTU10 .word 0C00000h,080000h,0000000FFh,0,CHKSUMC00
|
|
|
|
RTU27 .word 0E00000h,080000h,00000FF00h,-8,CHKSUME01
|
|
RTU23 .word 0D80000h,080000h,00000FF00h,-8,CHKSUMD81
|
|
RTU19 .word 0D00000h,080000h,00000FF00h,-8,CHKSUMD01
|
|
RTU15 .word 0C80000h,080000h,00000FF00h,-8,CHKSUMC81
|
|
RTU11 .word 0C00000h,080000h,00000FF00h,-8,CHKSUMC01
|
|
|
|
RTU28 .word 0E00000h,080000h,000FF0000h,-16,CHKSUME02
|
|
RTU24 .word 0D80000h,080000h,000FF0000h,-16,CHKSUMD82
|
|
RTU20 .word 0D00000h,080000h,000FF0000h,-16,CHKSUMD02
|
|
RTU16 .word 0C80000h,080000h,000FF0000h,-16,CHKSUMC82
|
|
RTU12 .word 0C00000h,080000h,000FF0000h,-16,CHKSUMC02
|
|
|
|
RTU29 .word 0E00000h,080000h,0FF000000h,-24,CHKSUME03
|
|
RTU25 .word 0D80000h,080000h,0FF000000h,-24,CHKSUMD83
|
|
RTU21 .word 0D00000h,080000h,0FF000000h,-24,CHKSUMD03
|
|
RTU17 .word 0C80000h,080000h,0FF000000h,-24,CHKSUMC83
|
|
RTU13 .word 0C00000h,080000h,0FF000000h,-24,CHKSUMC03
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*RAM CHIP DEFINES
|
|
* .word START_ADDR,LENGTH,MASK,REPETITIONS,WAIT_STATE_MODE,PRINTABLE?,UNUMBER
|
|
|
|
;WAVE RAM
|
|
RTU72 .word 0A00000h,080000h,00000000Fh,1,1000h,2
|
|
RTU69 .word 0A00000h,080000h,0000000F0h,1,1000h,2
|
|
RTU70 .word 0A00000h,080000h,000000F00h,1,1000h,2
|
|
RTU71 .word 0A00000h,080000h,00000F000h,1,1000h,2
|
|
|
|
RTU76 .word 0A00001h,080000h,00000000Fh,1,1000h,2
|
|
RTU73 .word 0A00001h,080000h,0000000F0h,1,1000h,2
|
|
RTU74 .word 0A00001h,080000h,000000F00h,1,1000h,2
|
|
RTU75 .word 0A00001h,080000h,00000F000h,1,1000h,2
|
|
|
|
;COLOR RAM
|
|
RTU85 .word 09E0000h,08000h,000FF00h,1,SOFT_WS,1
|
|
RTU87 .word 09E0000h,08000h,00000FFh,1,SOFT_WS,1
|
|
|
|
;VIDEO RAM
|
|
RTU102 .word 0900000h,020000h,0000000FFh,1,1000h,2
|
|
RTU95 .word 0900000h,020000h,00000FF00h,1,1000h,2
|
|
RTU94 .word 0900001h,020000h,0000000FFh,1,1000h,2
|
|
RTU101 .word 0900001h,020000h,00000FF00h,1,1000h,2
|
|
|
|
;FAST RAM
|
|
RTU57 .word 0400000h,020000h,00000FF00h,1,SOFT_WS,1
|
|
RTU56 .word 0400000h,020000h,0000000FFh,1,SOFT_WS,1
|
|
RTU60 .word 0400000h,020000h,0FF000000h,1,SOFT_WS,1
|
|
RTU59 .word 0400000h,020000h,000FF0000h,1,SOFT_WS,1
|
|
.text
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*VECTOR PTR,XmYm,XM,YM,U_NUM
|
|
*
|
|
CHIPMAC .MACRO CTTP,MNX,MNY,MXX,MXY,UTP,RAMROM
|
|
.data
|
|
tt? .string ":UTP:",0
|
|
.text
|
|
.word :CTTP:,:MNX:,:MNY:,:MXX:,:MXY:,tt?,:RAMROM:
|
|
.ENDM
|
|
|
|
CHIPMC .MACRO CTTP,MNX,MNY,MXX,MXY,UTP,RAMROM
|
|
.data
|
|
tt? .string ":UTP:",0
|
|
.text
|
|
.word :CTTP:,:MNX:,:MNY:,:MNX:+:MXX:,:MNY:+:MXY:,tt?,:RAMROM:
|
|
.ENDM
|
|
|
|
ISRAM .set 0
|
|
ISROM .set 1
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
CHIPTEST_TABLEI .word CHIPTEST_TABLE
|
|
CHIPTEST_TABLE
|
|
|
|
;color ram
|
|
CHIPMC RTU85,130,250,60,16,"U85",ISRAM ;COLOR RAM
|
|
CHIPMC RTU87,130,270,60,16,"U87",ISRAM
|
|
;bitmap
|
|
CHIPMAC RTU102,300,300,350,316,"U102",ISRAM ;VIDEO RAM
|
|
CHIPMAC RTU95,300,280,350,296,"U95",ISRAM
|
|
CHIPMAC RTU94,240,280,290,296,"U94",ISRAM
|
|
CHIPMAC RTU101,240,300,290,316,"U101",ISRAM
|
|
|
|
STATIC_TABLE
|
|
CHIPMC RTU56,250,195,40,15,"U56",ISROM
|
|
CHIPMC RTU57,300,195,40,15,"U57",ISROM ;FAST RAM
|
|
CHIPMC RTU59,370,195,40,15,"U59",ISROM
|
|
CHIPMC RTU60,420,195,40,15,"U60",ISROM
|
|
|
|
TESTING_CHIPS
|
|
|
|
CHIPMAC RTU26,240,60, 290,80, "U26",ISROM ;BIG EPROM WORLD
|
|
CHIPMAC RTU22,240,85, 290,105,"U22",ISROM
|
|
CHIPMAC RTU18,240,110,290,130,"U18",ISROM
|
|
CHIPMAC RTU14,240,135,290,155,"U14",ISROM
|
|
CHIPMAC RTU10,240,160,290,180,"U10",ISROM
|
|
|
|
CHIPMAC RTU27,300,60, 350,80, "U27",ISROM ;E0
|
|
CHIPMAC RTU23,300,85, 350,105,"U23",ISROM ;D8
|
|
CHIPMAC RTU19,300,110,350,130,"U19",ISROM ;D0
|
|
CHIPMAC RTU15,300,135,350,155,"U15",ISROM ;C8
|
|
CHIPMAC RTU11,300,160,350,180,"U11",ISROM ;C0
|
|
|
|
CHIPMAC RTU28,360,60, 410,80, "U28",ISROM
|
|
CHIPMAC RTU24,360,85, 410,105,"U24",ISROM
|
|
CHIPMAC RTU20,360,110,410,130,"U20",ISROM
|
|
CHIPMAC RTU16,360,135,410,155,"U16",ISROM
|
|
CHIPMAC RTU12,360,160,410,180,"U12",ISROM
|
|
|
|
CHIPMAC RTU29,420,60, 470,80, "U29",ISROM
|
|
CHIPMAC RTU25,420,85, 470,105,"U25",ISROM
|
|
CHIPMAC RTU21,420,110,470,130,"U21",ISROM
|
|
CHIPMAC RTU17,420,135,470,155,"U17",ISROM
|
|
CHIPMAC RTU13,420,160,470,180,"U13",ISROM
|
|
|
|
|
|
CHIPMC RTU69,360,220,40,14,"U69",ISRAM
|
|
CHIPMC RTU70,360,240,40,14,"U70",ISRAM
|
|
CHIPMC RTU71,360,260,40,14,"U71",ISRAM
|
|
CHIPMC RTU72,360,280,40,14,"U72",ISRAM ;WAVE RAM
|
|
|
|
CHIPMC RTU73,410,220,40,14,"U73",ISRAM
|
|
CHIPMC RTU74,410,240,40,14,"U74",ISRAM
|
|
CHIPMC RTU75,410,260,40,14,"U75",ISRAM
|
|
CHIPMC RTU76,410,280,40,14,"U76",ISRAM ;WAVE RAM
|
|
|
|
.word 0
|
|
|
|
RTU31 ;nothing...
|
|
CMOS_CHIP
|
|
CHIPMC RTU31,130,120,40,18,"U31",ISROM ;CMOS CHIP
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*STRUCT CHIP_TEST_TABLE
|
|
CTT_TESTTAB .set 0
|
|
CTT_MINX .set 1
|
|
CTT_MINY .set 2
|
|
CTT_MAXX .set 3
|
|
CTT_MAXY .set 4
|
|
CTT_U .set 5
|
|
CTT_RAMROM .set 6
|
|
CTT_SIZE .set 7
|
|
*ENDSTRUCT
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*TEST_CHIPS Controller Routine
|
|
*
|
|
*
|
|
* 1. THE STACK IS ONCHIP, THEREFORE WE CAN ASSUME
|
|
* THAT IT WORKS, THEREFORE WE MAY USE CALLs
|
|
* TO SUBROUTINES.
|
|
* 2. DESIGNED TO BE RUN OUT OF ROM
|
|
* 3. INTERRUPTS SHOULD BE TURNED OFF
|
|
* 4. AFTERWARDS RAM SHOULD BE CLEARED
|
|
* 5. ON CHIP RAM IS NOT TESTED (OBVIOUSLY)
|
|
* 6. ROUTINE IS CALLED (SEE #1)
|
|
* 7. SPACE MUST BE RESERVED FOR THE FOLLOWING TWO
|
|
* ROUTINES ON ONCHIP RAM:
|
|
* RAMTEST (this file)
|
|
* _pixel (FONT1A.ASM)
|
|
* BECAUSE THESE ROUTINES CHANGE WAIT STATES (WHICH
|
|
* CAN NOT HAPPEN DURING PROGRAM FETCH FROM SLOW
|
|
* ROM (see #2)).
|
|
*
|
|
.globl TEST_STATIC_CHIPS
|
|
TEST_STATIC_CHIPS:
|
|
DINT
|
|
SETDP
|
|
CALL COPY_RAMTEST
|
|
LDL BASICS_RAM,AR5
|
|
LDI 3,AR6
|
|
LDL STATIC_TABLE,AR4
|
|
|
|
TSTBL1A
|
|
LDI *+AR4(CTT_TESTTAB),AR0
|
|
LDI *AR0++,AR2
|
|
LDI *AR0++,R2
|
|
LDI *AR0++,R3
|
|
LDI *AR0++,RC
|
|
LDI *AR0++,RS
|
|
LDI *AR0++,BK
|
|
|
|
.globl FEED_WATCHDOG_HARD
|
|
CALL FEED_WATCHDOG_HARD
|
|
|
|
PUSH AR0
|
|
PUSH AR6
|
|
PUSH AR5
|
|
PUSH AR4
|
|
CALL RAMTEST
|
|
POP AR4
|
|
POP AR5
|
|
POP AR6
|
|
POP AR0
|
|
STI R0,*AR5++ ;SAVE RESULTS
|
|
|
|
CMPI 1,R0
|
|
BEQ IS_STATIC_ERROR
|
|
LDI *++AR4(CTT_SIZE),R0
|
|
DBU AR6,TSTBL1A
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
GET_AR4_DIGITS:
|
|
LDI *+AR4(CTT_U),AR0
|
|
LDI *AR0,AR0
|
|
LDI AR0,R1
|
|
RS 8,R1
|
|
AND 0FFh,R1
|
|
SUBI '0',R1
|
|
|
|
LDI AR0,R2
|
|
RS 16,R2
|
|
AND 0FFh,R2
|
|
CMPI 0,R2
|
|
BEQ R1R2ZER
|
|
SUBI '0',R2
|
|
|
|
LDI AR0,R3
|
|
RS 24,R3
|
|
AND 0FFh,R3
|
|
CMPI 0,R3
|
|
BEQ R3ZERO
|
|
SUBI '0',R3
|
|
BU NZERO
|
|
R1R2ZER CLRI R2
|
|
R3ZERO CLRI R3
|
|
NZERO
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
BLINK_AND_CONTINUE:
|
|
PUSH RS
|
|
PUSH RE
|
|
PUSH RC
|
|
PUSH AR0
|
|
PUSH R1
|
|
PUSH R2
|
|
PUSH R3
|
|
CALL GET_AR4_DIGITS
|
|
CALL BLINK_DIGITS
|
|
POP R3
|
|
POP R2
|
|
POP R1
|
|
POP AR0
|
|
POP RC
|
|
POP RE
|
|
POP RS
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
IS_STATIC_ERROR:
|
|
CALL GET_AR4_DIGITS
|
|
|
|
ELOOP
|
|
CALL BLINK_DIGITS
|
|
BU ELOOP
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*
|
|
*THIS ROUTINE TAKES OVER THE CPU, AND RETURNS
|
|
*
|
|
*PARAMETERS
|
|
* R1 DIGIT 1
|
|
* R2 DIGIT 2
|
|
* R3 DIGIT 3
|
|
*
|
|
*
|
|
LLED_ON:
|
|
LDI @SYSCNTL,R0 ;if the system hangs and the LED
|
|
ANDN LED_OFF,R0 ;is on we were in this routine
|
|
STI R0,@SYSCNTL ;when it happened
|
|
LDP @SYSCNTLR
|
|
STI R0,@SYSCNTLR
|
|
SETDP
|
|
RETS
|
|
|
|
LLED_OFF:
|
|
LDI @SYSCNTL,R0
|
|
OR LED_OFF,R0
|
|
STI R0,@SYSCNTL
|
|
LDP @SYSCNTLR
|
|
STI R0,@SYSCNTLR
|
|
SETDP
|
|
RETS
|
|
|
|
BLINK_DIGITS:
|
|
PUSH R0
|
|
PUSH R1
|
|
PUSH R2
|
|
PUSH R3
|
|
PUSH AR4
|
|
|
|
LDI R1,AR4 ;#NUMBER OF ITERATIONS
|
|
DEC AR4
|
|
CMPI 0,AR4
|
|
BLT BDL1X
|
|
BDL1
|
|
CALL LLED_ON
|
|
|
|
LDIL 8000000,RC
|
|
RPTS RC
|
|
NOP
|
|
CALL LLED_OFF
|
|
|
|
LDIL 8000000,RC
|
|
RPTS RC
|
|
NOP
|
|
DBU AR4,BDL1
|
|
BDL1X
|
|
|
|
|
|
|
|
LDIL 35000000,RC
|
|
RPTS RC
|
|
NOP
|
|
|
|
|
|
LDI R2,AR4 ;#NUMBER OF ITERATIONS
|
|
DEC AR4
|
|
CMPI 0,AR4
|
|
BLT BDL2X
|
|
BDL2
|
|
CALL LLED_ON
|
|
LDIL 8000000,RC
|
|
RPTS RC
|
|
NOP
|
|
CALL LLED_OFF
|
|
LDIL 8000000,RC
|
|
RPTS RC
|
|
NOP
|
|
|
|
DBU AR4,BDL2
|
|
BDL2X
|
|
|
|
|
|
LDIL 35000000,RC
|
|
RPTS RC
|
|
NOP
|
|
|
|
LDI R3,AR4 ;#NUMBER OF ITERATIONS
|
|
DEC AR4
|
|
CMPI 0,AR4
|
|
BLT BDL3X
|
|
BDL3 CALL LLED_ON
|
|
LDIL 8000000,RC
|
|
RPTS RC
|
|
NOP
|
|
CALL LLED_OFF
|
|
LDIL 8000000,RC
|
|
RPTS RC
|
|
NOP
|
|
|
|
DBU AR4,BDL3
|
|
BDL3X
|
|
|
|
|
|
LDIL 35000000,RC
|
|
RPTS RC
|
|
NOP
|
|
|
|
|
|
LDIL 35000000,RC
|
|
RPTS RC
|
|
NOP
|
|
|
|
POP AR4
|
|
POP R3
|
|
POP R2
|
|
POP R1
|
|
POP R0
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
TEST_CHIPS:
|
|
PUSH DP
|
|
LDP @9E0000h
|
|
CLRI R0 ;set background to 0
|
|
STI R0,@9E0000h
|
|
POP DP
|
|
|
|
|
|
CALL SETPAGE0
|
|
LDIL SCREEN0,R0 ;set active screen to 1 (writeable)
|
|
STI R0,@ACTIVE_SCREEN
|
|
DINT
|
|
CALL COPY_RAMTEST
|
|
CALL TEST_BASICS
|
|
|
|
|
|
LDI COL_VDGREY,RC
|
|
TEXTITT "CPU BOARD TEST",50,40
|
|
|
|
;
|
|
;NOW CHECK AND PLOT ACCORDINGLY
|
|
;
|
|
LDL TESTING_CHIPS,AR4
|
|
TESTLP1
|
|
LDI *+AR4(CTT_RAMROM),R0
|
|
BZ CHECK_AS_RAM ;(W/ SCRAMBLE)
|
|
|
|
LDI *+AR4(CTT_TESTTAB),AR0
|
|
LDI *AR0++,AR2 ;ADDR
|
|
LDI *AR0++,RC ;LENGTH
|
|
LDI *AR0++,R2 ;MASK
|
|
LDI *AR0++,R3 ;SHIFT
|
|
CALL GENERATE_CHECKSUM
|
|
|
|
LDI *AR0,AR0
|
|
LDI *AR0,R1
|
|
CMPI R1,R0
|
|
LDIEQ COL_GREEN,RS
|
|
LDINE COL_RED,RS
|
|
|
|
|
|
; CMPI COL_RED,RS
|
|
; CALLEQ BLINK_AND_CONTINUE
|
|
|
|
|
|
;CHECKSUM PART
|
|
BU DN_CHK
|
|
|
|
CHECK_AS_RAM
|
|
LDI *+AR4(CTT_TESTTAB),AR0
|
|
CMPI -1,AR0
|
|
BEQ TEST_CHIPSX
|
|
|
|
LDI *AR0++,AR2
|
|
LDI *AR0++,R2
|
|
LDI *AR0++,R3
|
|
LDI *AR0++,RC
|
|
LDI *AR0++,RS
|
|
LDI *AR0++,BK
|
|
PUSH AR0
|
|
PUSH AR4
|
|
CALL RAMTEST
|
|
POP AR4
|
|
POP AR0
|
|
LDI R0,R0
|
|
LDIZ COL_GREEN,RS
|
|
; LDIZ COL_GREY,RS
|
|
LDINZ COL_RED,RS
|
|
|
|
; CMPI COL_RED,RS
|
|
; CALLEQ BLINK_AND_CONTINUE
|
|
|
|
DN_CHK
|
|
|
|
LDI *+AR4(CTT_MINX),AR2
|
|
INC AR2
|
|
LDI *+AR4(CTT_MINY),R2
|
|
INC R2
|
|
LDI *+AR4(CTT_MAXX),R3
|
|
DEC R3
|
|
LDI *+AR4(CTT_MAXY),RC
|
|
DEC RC
|
|
CALL _fill
|
|
|
|
LDI *+AR4(CTT_U),AR2
|
|
LDI *+AR4(CTT_MAXX),R2
|
|
LDI *+AR4(CTT_MAXY),R3
|
|
SUBI *+AR4(CTT_MINX),R2
|
|
SUBI *+AR4(CTT_MINY),R3
|
|
RS 1,R2
|
|
RS 1,R3
|
|
ADDI *+AR4(CTT_MINX),R2
|
|
ADDI *+AR4(CTT_MINY),R3
|
|
SUBI 15,R2
|
|
SUBI 4,R3
|
|
LDI COL_BLACK,RC
|
|
CALL _outtextxyc
|
|
|
|
LDI *++AR4(CTT_SIZE),R0
|
|
BNZ TESTLP1
|
|
|
|
TEST_CHIPSX
|
|
CALL CMOS_CHIP_TEST
|
|
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
PLOT_OUTLINE_OF_CHIPS:
|
|
LDI @CHIPTEST_TABLEI,AR4
|
|
POOCL
|
|
LDI *+AR4(CTT_MINX),AR2
|
|
LDI *+AR4(CTT_MINY),R2
|
|
LDI *+AR4(CTT_MAXX),R3
|
|
LDI *+AR4(CTT_MAXY),RC
|
|
LDI COL_WHITE,RS
|
|
PUSH DP
|
|
CALL _rectangle
|
|
POP DP
|
|
|
|
LDI *+AR4(CTT_U),AR2
|
|
LDI *+AR4(CTT_MAXX),R2
|
|
LDI *+AR4(CTT_MAXY),R3
|
|
SUBI *+AR4(CTT_MINX),R2
|
|
SUBI *+AR4(CTT_MINY),R3
|
|
RS 1,R2
|
|
RS 1,R3
|
|
ADDI *+AR4(CTT_MINX),R2
|
|
ADDI *+AR4(CTT_MINY),R3
|
|
SUBI 15,R2
|
|
SUBI 4,R3
|
|
LDI COL_DGREY,RC
|
|
CALL _outtextxyc
|
|
|
|
LDI *++AR4(CTT_SIZE),R0
|
|
BNZ POOCL
|
|
|
|
CALL CMOS_CHIP_DISPLAY
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
CMOS_CHIP_DISPLAY:
|
|
LDL CMOS_CHIP,AR4
|
|
LDI *+AR4(CTT_MINX),AR2
|
|
LDI *+AR4(CTT_MINY),R2
|
|
LDI *+AR4(CTT_MAXX),R3
|
|
LDI *+AR4(CTT_MAXY),RC
|
|
LDI COL_WHITE,RS
|
|
PUSH DP
|
|
CALL _rectangle
|
|
POP DP
|
|
|
|
LDI *+AR4(CTT_U),AR2
|
|
LDI *+AR4(CTT_MAXX),R2
|
|
LDI *+AR4(CTT_MAXY),R3
|
|
SUBI *+AR4(CTT_MINX),R2
|
|
SUBI *+AR4(CTT_MINY),R3
|
|
RS 1,R2
|
|
RS 1,R3
|
|
ADDI *+AR4(CTT_MINX),R2
|
|
ADDI *+AR4(CTT_MINY),R3
|
|
SUBI 15,R2
|
|
SUBI 4,R3
|
|
LDI COL_DGREY,RC
|
|
CALL _outtextxyc
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
CMOS_CHIP_TEST:
|
|
PUSH AR4
|
|
PUSH R0
|
|
PUSH R1
|
|
PUSH R2
|
|
PUSH R3
|
|
LDL CMOS_CHIP,AR4
|
|
LDIL 5A5A5A5Ah,R3
|
|
|
|
LDP @CPU_WS
|
|
LDI 88h,R1
|
|
STI R1,@CPU_WS
|
|
SETDP
|
|
|
|
CMOS_WP_OFF
|
|
NOP ;DELAY FOR TIMING...
|
|
|
|
LDI 5,AR5
|
|
KKLL1 LDI R3,R2
|
|
|
|
AND 0FFh,R2
|
|
LS 24,R2
|
|
|
|
LDI AUD_CHIPTEST_DEDICATED,AR2
|
|
LS 2,AR2
|
|
ADDI @CMOSI,AR2
|
|
|
|
|
|
STI R2,*AR2
|
|
RS 24,R2
|
|
|
|
|
|
LDL 0C00000h,AR0 ;DUMMY READ
|
|
LDI *AR0,R0
|
|
|
|
LDI *AR2,R0
|
|
RS 24,R0
|
|
|
|
CMPI R2,R0
|
|
BNE CM_ISERROR
|
|
|
|
LDI R3,R1
|
|
LSH 1,R3
|
|
XOR R3,R1
|
|
BNN RND2
|
|
OR 1,R3
|
|
RND2 MPYI 794Fh,R3
|
|
DBU AR5,KKLL1
|
|
|
|
CMOS_WP_ON
|
|
|
|
|
|
;NO ERROR
|
|
LDI COL_GREEN,RS
|
|
BU KKJJ
|
|
|
|
CM_ISERROR
|
|
CMOS_WP_ON
|
|
LDI COL_RED,RS
|
|
KKJJ
|
|
|
|
|
|
; CMPI COL_RED,RS
|
|
; CALLEQ BLINK_AND_CONTINUE
|
|
|
|
LDP @CPU_WS
|
|
LDI 1048h,R0
|
|
STI R0,@CPU_WS
|
|
SETDP
|
|
|
|
|
|
LDI *+AR4(CTT_MINX),AR2
|
|
INC AR2
|
|
LDI *+AR4(CTT_MINY),R2
|
|
INC R2
|
|
LDI *+AR4(CTT_MAXX),R3
|
|
DEC R3
|
|
LDI *+AR4(CTT_MAXY),RC
|
|
DEC RC
|
|
CALL _fill
|
|
|
|
LDI *+AR4(CTT_U),AR2
|
|
LDI *+AR4(CTT_MAXX),R2
|
|
LDI *+AR4(CTT_MAXY),R3
|
|
SUBI *+AR4(CTT_MINX),R2
|
|
SUBI *+AR4(CTT_MINY),R3
|
|
RS 1,R2
|
|
RS 1,R3
|
|
ADDI *+AR4(CTT_MINX),R2
|
|
ADDI *+AR4(CTT_MINY),R3
|
|
SUBI 15,R2
|
|
SUBI 4,R3
|
|
LDI COL_BLACK,RC
|
|
CALL _outtextxyc
|
|
|
|
POP R3
|
|
POP R2
|
|
POP R1
|
|
POP R0
|
|
POP AR4
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*FOR THE DISPLAY TO WORK WE MUST HAVE OPERATING PROPERLY:
|
|
* VIDEO RAM (8 CHIPS)
|
|
* COLOR RAM (2 CHIPS)
|
|
*SO, WE TEST THESE (NOT PLOTTING TO THE SCREEN), AND SAVE THE RESULTS,
|
|
*THEN WE BEGIN PLOTTING THE SCREEN, INITIALIZATING THESE SPACES WITH THE
|
|
*RESULTS.
|
|
*
|
|
*
|
|
fbss BASICS_RAM,10
|
|
TEST_BASICS:
|
|
LDL BASICS_RAM,AR5
|
|
LDI 5,AR6
|
|
LDL CHIPTEST_TABLE,AR4
|
|
|
|
TSTBL1
|
|
LDI *+AR4(CTT_TESTTAB),AR0
|
|
LDI *AR0++,AR2
|
|
LDI *AR0++,R2
|
|
LDI *AR0++,R3
|
|
LDI *AR0++,RC
|
|
LDI *AR0++,RS
|
|
LDI *AR0++,BK
|
|
PUSH AR0
|
|
PUSH AR6
|
|
PUSH AR5
|
|
PUSH AR4
|
|
CALL RAMTEST
|
|
POP AR4
|
|
POP AR5
|
|
POP AR6
|
|
POP AR0
|
|
STI R0,*AR5++ ;SAVE RESULTS
|
|
|
|
CMPI 0,R0
|
|
CALLNZ BLINK_AND_CONTINUE
|
|
|
|
|
|
LDI *++AR4(CTT_SIZE),R0
|
|
DBU AR6,TSTBL1
|
|
|
|
|
|
|
|
.globl HARD_LOAD_DIAGPAL
|
|
CALL HARD_LOAD_DIAGPAL
|
|
CLRI R0
|
|
STI R0,@COLORAM
|
|
CALL CLRSCRN ;we are NOT page flipping
|
|
PUSH DP
|
|
LINE 20,50,490,50,COL_WHITE
|
|
LINE 20,50,20,360,COL_WHITE
|
|
LINE 490,50,490,360,COL_WHITE
|
|
|
|
LINE 20,360,80,360,COL_WHITE
|
|
LINE 80,360,80,340,COL_WHITE
|
|
LINE 80,340,100,340,COL_WHITE
|
|
LINE 100,340,100,360,COL_WHITE
|
|
LINE 100,360,200,360,COL_WHITE
|
|
LINE 200,360,200,340,COL_WHITE
|
|
LINE 200,340,220,340,COL_WHITE
|
|
LINE 220,340,220,360,COL_WHITE
|
|
LINE 220,360,490,360,COL_WHITE
|
|
|
|
POP DP
|
|
CALL PLOT_OUTLINE_OF_CHIPS
|
|
|
|
romdata
|
|
MEMTST1 .string "CRUISN USA (TM)",0
|
|
.text
|
|
|
|
LDI COL_VDGREY,RC
|
|
TEXTIT MEMTST1,50,20
|
|
TEXTIT DATE_STAMP,50,30
|
|
TEXTIT VERSION_STAMP,270,30
|
|
|
|
|
|
LDL BASICS_RAM,AR5
|
|
LDI 9,AR6
|
|
LDL CHIPTEST_TABLE,AR4
|
|
|
|
TSTBL2
|
|
LDI *AR5++,R0 ;SAVE RESULTS
|
|
LDIZ COL_GREEN,RS
|
|
LDINZ COL_RED,RS
|
|
|
|
|
|
LDI *+AR4(CTT_MINX),AR2
|
|
INC AR2
|
|
LDI *+AR4(CTT_MINY),R2
|
|
INC R2
|
|
LDI *+AR4(CTT_MAXX),R3
|
|
DEC R3
|
|
LDI *+AR4(CTT_MAXY),RC
|
|
DEC RC
|
|
CALL _fill
|
|
|
|
LDI *+AR4(CTT_U),AR2
|
|
LDI *+AR4(CTT_MAXX),R2
|
|
LDI *+AR4(CTT_MAXY),R3
|
|
SUBI *+AR4(CTT_MINX),R2
|
|
SUBI *+AR4(CTT_MINY),R3
|
|
RS 1,R2
|
|
RS 1,R3
|
|
ADDI *+AR4(CTT_MINX),R2
|
|
ADDI *+AR4(CTT_MINY),R3
|
|
SUBI 15,R2
|
|
SUBI 4,R3
|
|
LDI COL_BLACK,RC
|
|
CALL _outtextxyc
|
|
|
|
LDI *++AR4(CTT_SIZE),R0
|
|
DBU AR6,TSTBL2
|
|
|
|
|
|
;Static *MUST* be working to get this far,
|
|
;so mark them ALL as cool
|
|
;
|
|
LDI 3,AR6
|
|
LDL STATIC_TABLE,AR4
|
|
TSTBL2C
|
|
LDI COL_GREEN,RS
|
|
LDI *+AR4(CTT_MINX),AR2
|
|
INC AR2
|
|
LDI *+AR4(CTT_MINY),R2
|
|
INC R2
|
|
LDI *+AR4(CTT_MAXX),R3
|
|
DEC R3
|
|
LDI *+AR4(CTT_MAXY),RC
|
|
DEC RC
|
|
CALL _fill
|
|
|
|
LDI *+AR4(CTT_U),AR2
|
|
LDI *+AR4(CTT_MAXX),R2
|
|
LDI *+AR4(CTT_MAXY),R3
|
|
SUBI *+AR4(CTT_MINX),R2
|
|
SUBI *+AR4(CTT_MINY),R3
|
|
RS 1,R2
|
|
RS 1,R3
|
|
ADDI *+AR4(CTT_MINX),R2
|
|
ADDI *+AR4(CTT_MINY),R3
|
|
SUBI 15,R2
|
|
SUBI 4,R3
|
|
LDI COL_BLACK,RC
|
|
CALL _outtextxyc
|
|
LDI *++AR4(CTT_SIZE),R0
|
|
DBU AR6,TSTBL2C
|
|
|
|
CALL CMOS_CHIP_TEST
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*TEST RAM AREA
|
|
*CALLING PARAMETERS
|
|
*
|
|
*PARAMETERS
|
|
* AR2 START ADDR
|
|
* R2 LENGTH WORDS
|
|
* R3 MASK (FOR BYTE WIDE CHIPS)
|
|
* RC # OF PASSES
|
|
* RS WAIT STATE CODE
|
|
* BK INCREMENT (USUALLY 1)
|
|
*
|
|
*RETURNS
|
|
* R0 1 ON ERROR
|
|
* R0 0 ON NO ERROR
|
|
*
|
|
*CLOBBERS
|
|
* DP,RS,RE,RC
|
|
* R0,R1,R2,R3,R4,R5
|
|
* AR0,AR1,AR2,AR3
|
|
*USES
|
|
* AR6 WATCHDOG FEEDER
|
|
*
|
|
*
|
|
RAMTEST: ;THIS IS CALLED DURING RUNTIME
|
|
LDL BLOWLIST,R0
|
|
BU R0
|
|
|
|
|
|
;THIS IS THE ACTUAL ROUTINE, BUT IT MUST
|
|
;BE PLACED IN ON-CHIP MEMORY
|
|
;
|
|
RAMTEST_REAL:
|
|
PUSH DP
|
|
PUSH R6
|
|
PUSH AR6
|
|
|
|
LCALL FEED_WATCHDOG_HARD
|
|
|
|
|
|
LDP @CPU_WS ;set hardware wait states
|
|
LDI @CPU_WS,R0
|
|
PUSH R0
|
|
STI RS,@CPU_WS
|
|
LDI 0,AR3 ;DUMMY READ ADDRESS
|
|
LDI *AR3,R5 ;DUMMY READ
|
|
LDP @RANDI
|
|
LDI @RANDI,R4 ;SETUP R4=RANDOM # REGISTER
|
|
|
|
LDI RC,AR0 ;NUMBER OF PASSES
|
|
DEC AR0
|
|
|
|
DEC R2 ;LENGTH OF CHECK
|
|
LDI R2,AR4
|
|
|
|
RAMTST0
|
|
|
|
LDI AR2,AR1 ;GET ADDRESS
|
|
LDI R4,R0 ;GET RANDOM # STARTING POINT
|
|
*WRITE RANDOM NUMBERS TO RAM
|
|
|
|
RAMTST1
|
|
LDI R0,R1
|
|
LSH 1,R0
|
|
LDI 0,R6
|
|
XOR R0,R1
|
|
|
|
LDIN 2,R6 ; BNN RAMTST2
|
|
OR R6,R0 ; OR 2,R0
|
|
;RAMTST2
|
|
DBUD AR4,RAMTST1
|
|
|
|
STI R0,*AR1
|
|
ADDI BK,AR1
|
|
LKKK LDI *AR3,R5 ;DUMMY READ
|
|
|
|
|
|
|
|
*READ RANDOM NUMBERS FROM RAM
|
|
LDI AR2,AR1 ;GET ADDRESS
|
|
LDI R4,R0 ;GET RANDOM # STARTING POINT
|
|
|
|
LDI R0,R1
|
|
LSH 1,R0
|
|
|
|
CLRI R6
|
|
CLRI R7
|
|
|
|
|
|
LDI R2,AR4 ;LENGTH
|
|
XOR R0,R1
|
|
LDIN 2,R6 ; BNN RAMTST4
|
|
|
|
RAMTST3
|
|
OR R6,R0 ; OR 2,R0
|
|
;RAMTST4
|
|
INC R7
|
|
|
|
LDI *AR1,R1
|
|
ADDI BK,AR1
|
|
LDI *AR3,R5 ;DUMMY READ
|
|
|
|
AND R3,R1
|
|
LDI R0,R4
|
|
AND R3,R0
|
|
CMPI R1,R0
|
|
BNE RAMERR
|
|
|
|
LDI R4,R0
|
|
LDI R0,R1 ;mirrored from above
|
|
LSH 1,R0
|
|
;---->BNE RAMERR
|
|
|
|
DBUD AR4,RAMTST3
|
|
JJJH CLRI R6
|
|
XOR R0,R1
|
|
LDIN 2,R6 ; BNN RAMTST4
|
|
;----> DBUD AR4,RAMTST3
|
|
|
|
RAMRPT
|
|
DBU AR0,RAMTST0
|
|
|
|
|
|
CLRI R0 ;IS GOOD RAM
|
|
ENDING
|
|
POP R1 ;FIND WAIT STATES
|
|
LDP @CPU_WS ;set original wait states
|
|
STI R1,@CPU_WS
|
|
POP AR6
|
|
POP R6
|
|
POP DP
|
|
RETS
|
|
|
|
RAMERR:
|
|
LDI 1,R0 ;IS BAD RAM
|
|
BU ENDING
|
|
|
|
RAMTEST_END:
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
COPY_RAMTEST:
|
|
LDL RAMTEST_END,AR0
|
|
LDL RAMTEST_REAL,AR1
|
|
SUBI AR1,AR0 ;GET LENGTH
|
|
DEC AR0
|
|
|
|
LDL BLOWLIST,AR2
|
|
|
|
LDI AR0,RC
|
|
RPTB BBCP
|
|
LDI *AR1++,R0
|
|
BBCP STI R0,*AR2++
|
|
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*GENERATE_CHECKSUM
|
|
*
|
|
*GENERATES A 16 BIT CHECKSUM
|
|
*
|
|
*
|
|
*PARAMETERS
|
|
* AR2 START ADDR
|
|
* RC LENGTH WORDS
|
|
* R2 MASK
|
|
* R3 SHIFT
|
|
*
|
|
*RETURNS
|
|
* R0 PART CHECKSUM
|
|
*
|
|
GENERATE_CHECKSUM:
|
|
PUSH R1
|
|
PUSH RC
|
|
PUSH AR2
|
|
|
|
LCALL FEED_WATCHDOG
|
|
|
|
CLRI R0
|
|
DEC RC
|
|
RPTB CHKSUMG
|
|
LDI *AR2++,R1
|
|
AND R2,R1
|
|
LSH R3,R1
|
|
CHKSUMG ADDI R1,R0
|
|
LS 16,R0
|
|
RS 16,R0
|
|
POP AR2
|
|
POP RC
|
|
POP R1
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*ROM CHIP CHECKSUMS
|
|
*
|
|
|
|
|
|
.if CHECKSUM_GEN
|
|
CHKSUMC00 .word -1
|
|
CHKSUMC80 .word -1
|
|
CHKSUMD00 .word -1
|
|
CHKSUMD80 .word -1
|
|
CHKSUME00 .word -1
|
|
|
|
CHKSUMC01 .word -1
|
|
CHKSUMC81 .word -1
|
|
CHKSUMD01 .word -1
|
|
CHKSUMD81 .word -1
|
|
CHKSUME01 .word -1
|
|
|
|
CHKSUMC02 .word -1
|
|
CHKSUMC82 .word -1
|
|
CHKSUMD02 .word -1
|
|
CHKSUMD82 .word -1
|
|
CHKSUME02 .word -1
|
|
|
|
CHKSUMC03 .word -1
|
|
CHKSUMC83 .word -1
|
|
CHKSUMD03 .word -1
|
|
CHKSUMD83 .word -1
|
|
CHKSUME03 .word -1
|
|
|
|
|
|
CCHKSUMC00 .word 0
|
|
CCHKSUMC80 .word 0
|
|
CCHKSUMD00 .word 0
|
|
CCHKSUMD80 .word 0
|
|
CCHKSUME00 .word 0
|
|
|
|
CCHKSUMC01 .word 0
|
|
CCHKSUMC81 .word 0
|
|
CCHKSUMD01 .word 0
|
|
CCHKSUMD81 .word 0
|
|
CCHKSUME01 .word 0
|
|
|
|
CCHKSUMC02 .word 0
|
|
CCHKSUMC82 .word 0
|
|
CCHKSUMD02 .word 0
|
|
CCHKSUMD82 .word 0
|
|
CCHKSUME02 .word 0
|
|
|
|
CCHKSUMC03 .word 0
|
|
CCHKSUMC83 .word 0
|
|
CCHKSUMD03 .word 0
|
|
CCHKSUMD83 .word 0
|
|
CCHKSUME03 .word 0
|
|
.else
|
|
|
|
|
|
CHKSUMC00 .word CHECKSUM_C00
|
|
CHKSUMC80 .word CHECKSUM_C80
|
|
CHKSUMD00 .word CHECKSUM_D00
|
|
CHKSUMD80 .word CHECKSUM_D80
|
|
CHKSUME00 .word CHECKSUM_E00
|
|
|
|
CHKSUMC01 .word CHECKSUM_C01
|
|
CHKSUMC81 .word CHECKSUM_C81
|
|
CHKSUMD01 .word CHECKSUM_D01
|
|
CHKSUMD81 .word CHECKSUM_D81
|
|
CHKSUME01 .word CHECKSUM_E01
|
|
|
|
CHKSUMC02 .word CHECKSUM_C02
|
|
CHKSUMC82 .word CHECKSUM_C82
|
|
CHKSUMD02 .word CHECKSUM_D02
|
|
CHKSUMD82 .word CHECKSUM_D82
|
|
CHKSUME02 .word CHECKSUM_E02
|
|
|
|
CHKSUMC03 .word CHECKSUM_C03
|
|
CHKSUMC83 .word CHECKSUM_C83
|
|
CHKSUMD03 .word CHECKSUM_D03
|
|
CHKSUMD83 .word CHECKSUM_D83
|
|
CHKSUME03 .word CHECKSUM_E03
|
|
|
|
CCHKSUMC00 .word ~CHECKSUM_C00
|
|
CCHKSUMC80 .word ~CHECKSUM_C80
|
|
CCHKSUMD00 .word ~CHECKSUM_D00
|
|
CCHKSUMD80 .word ~CHECKSUM_D80
|
|
CCHKSUME00 .word ~CHECKSUM_E00
|
|
|
|
CCHKSUMC01 .word ~CHECKSUM_C01
|
|
CCHKSUMC81 .word ~CHECKSUM_C81
|
|
CCHKSUMD01 .word ~CHECKSUM_D01
|
|
CCHKSUMD81 .word ~CHECKSUM_D81
|
|
CCHKSUME01 .word ~CHECKSUM_E01
|
|
|
|
CCHKSUMC02 .word ~CHECKSUM_C02
|
|
CCHKSUMC82 .word ~CHECKSUM_C82
|
|
CCHKSUMD02 .word ~CHECKSUM_D02
|
|
CCHKSUMD82 .word ~CHECKSUM_D82
|
|
CCHKSUME02 .word ~CHECKSUM_E02
|
|
|
|
CCHKSUMC03 .word ~CHECKSUM_C03
|
|
CCHKSUMC83 .word ~CHECKSUM_C83
|
|
CCHKSUMD03 .word ~CHECKSUM_D03
|
|
CCHKSUMD83 .word ~CHECKSUM_D83
|
|
CCHKSUME03 .word ~CHECKSUM_E03
|
|
|
|
.endif
|
|
|
|
*----------------------------------------------------------------------------
|
|
.END
|