1547 lines
31 KiB
NASM
1547 lines
31 KiB
NASM
.MLIB "TROGMACS.LIB"
|
||
.FILE 'TROGPRNT.ASM'
|
||
.TITLE "TROG PRINTING ROUTINES"
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
.INCLUDE "MPROCEQU.ASM" ;MPROC equates
|
||
.INCLUDE "DISPEQU.ASM" ;Display processor equates
|
||
.INCLUDE "GSPINC.ASM" ;GSP assembler equates
|
||
.INCLUDE "SYSINC.ASM" ;Zunit system equates
|
||
.INCLUDE "TROGEQU.ASM"
|
||
.INCLUDE "IMGTBL.GLO"
|
||
.INCLUDE "STRING.H"
|
||
.INCLUDE "TROGSEQU.ASM"
|
||
.INCLUDE "TROGMEQU.ASM"
|
||
.INCLUDE "TROGAUDN.ASM"
|
||
.INCLUDE "TROGDIP.ASM"
|
||
|
||
.IF PRINTER
|
||
|
||
.REF GET_ADJ, DEC_HSR
|
||
.REF DEF_PAGE, AUD, AUD1, SET_PAGE
|
||
.REF RC_BYTE, RC_BYTEI, RC_WORD, RC_WORDI
|
||
.REF WC_BYTE, WC_BYTEI, WC_WORD, WC_WORDI
|
||
.REF WIPEOUT, COLOR_START
|
||
.REF P_FORK, ADJ_PAGE
|
||
.REF CHECKDIPFREE, READ_DIP, FORCEDIP
|
||
.REF G_CRED
|
||
.REF GET_CSPT
|
||
.REF AUD1, STORE_AUDIT, GET_AUD
|
||
.REF ROM_NAME
|
||
.REF PRINTAUDTABLE
|
||
.REF PRINTCOINTABLE
|
||
.REF CAT_A0, STRCAT
|
||
.REF GET_PLAYS
|
||
.REF CRED_P
|
||
.REF GPLAYNUM
|
||
.REF TUNNEL
|
||
.REF GAMEUNITS
|
||
|
||
.DEF PRINTP, TROGALIVE, RAWPRINT, DOGGYPRINT
|
||
.DEF PBUFCK
|
||
.DEF PRINTAUDS
|
||
.DEF PRINTERIN,PRINTEROUT,PRINTDEAD
|
||
.DEF PGAMESTART, PGAMEEND, PGAMEBUYIN, PGAMECONT, PIDIED
|
||
.DEF PGAMEWAVE, PGAMEWARP
|
||
.DEF OFFTIME, LASTSTACK,LASTA0
|
||
.DEF PLCOIN,PRCOIN,PSCOIN, PBADGUY
|
||
.DEF PGAMELEVEL
|
||
.DEF PRINT_DUMP
|
||
|
||
PBUFSIZE EQU 2048 ; BUFFER SIZE -- MUST BE POWER OF 2
|
||
.BSS OFFTIME,32
|
||
.BSS LASTSTACK,32 ; LAST STACK POINTER
|
||
.BSS LASTA0,32 ; LAST VALUE OF A0
|
||
.BSS PRINTERIN,16 ; INPUT POINTER
|
||
.BSS PRINTEROUT,16 ; OUTPUT POINTER
|
||
.BSS PRINTERBUF,8*PBUFSIZE ; PRINTER BUFFER
|
||
.BSS PRINTDEAD,16 ; PRINTER STATUS FLAG
|
||
.BSS WORKNUM,16
|
||
.BSS WORKSTR,32
|
||
.BSS AREGFILE,16*32
|
||
.BSS STACKFILE,10*32
|
||
.BSS MYSTRING,128*8
|
||
.BSS STRINGERFLAG,16
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PRINTER EQUATES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PRINTSTROBE EQU 0EFFFH ; STROBE LINE LOW
|
||
PRINTUNSTROBE EQU 0FF00H ; UNSTROBE THE LINE
|
||
PRINTRESET EQU 0DF00H ; PRINTER RESET
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GLOBAL VARIABLES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
.TEXT
|
||
.EVEN
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DUMPPRINT *
|
||
* *
|
||
* PRINT OUT A LOT OF USEFUL INFORMATION TO THE PRINTER *
|
||
* *
|
||
* ENTRY *
|
||
* ALL THE REGISTERS/TOP 10 STACK WORDS *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PRINT_DUMP
|
||
.IF DEBUG
|
||
DINT
|
||
JRUC $
|
||
.ENDIF
|
||
MMTM SP,A0,A1,A2,A8
|
||
MOVE A0,@AREGFILE,L ; A0
|
||
MOVI AREGFILE+20H,A0
|
||
MOVE A1,*A0+,L
|
||
MOVE A2,*A0+,L
|
||
MOVE A3,*A0+,L
|
||
MOVE A4,*A0+,L
|
||
MOVE A5,*A0+,L
|
||
MOVE A6,*A0+,L
|
||
MOVE A7,*A0+,L
|
||
MOVE A8,*A0+,L
|
||
MOVE A9,*A0+,L
|
||
MOVE A10,*A0+,L
|
||
MOVE A11,*A0+,L
|
||
MOVE A12,*A0+,L
|
||
MOVE A13,*A0+,L
|
||
MOVE A14,*A0+,L
|
||
|
||
MOVI DUMPMESS,A8
|
||
JSRP PRINTP
|
||
MOVI DMTIME,A8
|
||
MOVI AUDONTIME,A0
|
||
CALLA GET_AUD
|
||
MOVK 1,A2
|
||
CALLA FORMATLINE
|
||
|
||
MOVI AREGPRINT,A8
|
||
JSRP PRINTP
|
||
CALLR NEWLINE
|
||
MOVE B0,@AREGFILE,L ; B0
|
||
MOVI AREGFILE+20H,B0
|
||
MOVE B1,*B0+,L
|
||
MOVE B2,*B0+,L
|
||
MOVE B3,*B0+,L
|
||
MOVE B4,*B0+,L
|
||
MOVE B5,*B0+,L
|
||
MOVE B6,*B0+,L
|
||
MOVE B7,*B0+,L
|
||
MOVE B8,*B0+,L
|
||
MOVE B9,*B0+,L
|
||
MOVE B10,*B0+,L
|
||
MOVE B11,*B0+,L
|
||
MOVE B12,*B0+,L
|
||
MOVE B13,*B0+,L
|
||
MOVE B14,*B0+,L
|
||
MOVE @AREGFILE,B0,L ; RESTORE B0
|
||
MOVI BREGPRINT,A8
|
||
JSRP PRINTP
|
||
CALLR NEWLINE
|
||
|
||
MOVI 11,A2
|
||
MOVE SP,A1 ; GRAB THE STACK
|
||
ADDI 0A0H,A1
|
||
MOVI AREGFILE,A0
|
||
DSLOOP
|
||
MOVE *A1+,*A0+,L
|
||
DSJS A2,DSLOOP
|
||
MOVI STACKPRINT,A8
|
||
JSRP PRINTP
|
||
CALLR NEWLINE
|
||
|
||
MMFM SP,A0,A1,A2,A8
|
||
|
||
RETS
|
||
|
||
DUMPMESS
|
||
.STRING "\b****************************************\b",0AH,00
|
||
.WORD 1
|
||
.WORD 0
|
||
.EVEN
|
||
|
||
DMTIME .STRING "DUMP TIME ",0
|
||
.EVEN
|
||
|
||
AREGPRINT
|
||
.STRING " - A0 - - A1 - - A2 - - A3 - ",0AH
|
||
.STRING " %08lX %08lX %08lX %08lX",0Ah
|
||
.STRING " - A4 - - A5 - - A6 - - A7 - ",0AH
|
||
.STRING " %08lX %08lX %08lX %08lX",0Ah
|
||
.STRING " - A8 - - A9 - - A10 - - A11 - ",0AH
|
||
.STRING " %08lX %08lX %08lX %08lX",0Ah
|
||
.STRING " - A12 - - A13 - - A14 - ",0AH
|
||
.STRING " %08lX %08lX %08lX ",0Ah,0
|
||
.LONG AREGFILE+00H, AREGFILE+20H, AREGFILE+40H, AREGFILE+60H
|
||
.LONG AREGFILE+80H, AREGFILE+0A0H, AREGFILE+0C0H, AREGFILE+0E0H
|
||
.LONG AREGFILE+100H, AREGFILE+120H, AREGFILE+140H, AREGFILE+160H
|
||
.LONG AREGFILE+180H, AREGFILE+1A0H, AREGFILE+1C0H
|
||
.BYTE 0
|
||
.EVEN
|
||
|
||
BREGPRINT
|
||
.STRING " - B0 - - B1 - - B2 - - B3 - ",0AH
|
||
.STRING " %08lX %08lX %08lX %08lX",0Ah
|
||
.STRING " - B4 - - B5 - - B6 - - B7 - ",0AH
|
||
.STRING " %08lX %08lX %08lX %08lX",0Ah
|
||
.STRING " - B8 - - B9 - - B10 - - B11 - ",0AH
|
||
.STRING " %08lX %08lX %08lX %08lX",0Ah
|
||
.STRING " - B12 - - B13 - - B14 - ",0AH
|
||
.STRING " %08lX %08lX %08lX ",0Ah,0
|
||
.LONG AREGFILE+00H, AREGFILE+20H, AREGFILE+40H, AREGFILE+60H
|
||
.LONG AREGFILE+80H, AREGFILE+0A0H, AREGFILE+0C0H, AREGFILE+0E0H
|
||
.LONG AREGFILE+100H, AREGFILE+120H, AREGFILE+140H, AREGFILE+160H
|
||
.LONG AREGFILE+180H, AREGFILE+1A0H, AREGFILE+1C0H
|
||
.BYTE 0
|
||
.EVEN
|
||
|
||
STACKPRINT
|
||
.STRING " - S0 - - S1 - - S2 - - S3 - ",0AH
|
||
.STRING " %08lX %08lX %08lX %08lX",0Ah
|
||
.STRING " - S4 - - S5 - - S6 - - S7 - ",0AH
|
||
.STRING " %08lX %08lX %08lX %08lX",0Ah
|
||
.STRING " - S8 - - S9 - ",0AH
|
||
.STRING " %08lX %08lX ",0Ah,0
|
||
.LONG AREGFILE+00H, AREGFILE+20H, AREGFILE+40H, AREGFILE+60H
|
||
.LONG AREGFILE+80H, AREGFILE+0A0H, AREGFILE+0C0H, AREGFILE+0E0H
|
||
.LONG AREGFILE+100H, AREGFILE+120H
|
||
.BYTE 0
|
||
.EVEN
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PGAMESTART *
|
||
* *
|
||
* PRINT OUT A GAME START *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PGAMESTART
|
||
MMTM SP,A0,A1,A2,A3,A4,A8
|
||
CALLA GPLAYNUM ; ( OFF OF A2 )
|
||
SLL 5,A0
|
||
ADDI MGSTARTTAB,A0
|
||
MOVE *A0,A8,L
|
||
CALLR SETRED
|
||
MOVI AUDONTIME,A0
|
||
CALLA GET_AUD
|
||
MOVK 1,A2
|
||
CALLA FORMATLINE
|
||
CALLR SETBLACK
|
||
MMFM SP,A0,A1,A2,A3,A4,A8
|
||
RETS
|
||
|
||
MGSTARTTAB
|
||
.LONG MGSTART1, MGSTART2, MGSTART3, MGSTART4
|
||
|
||
MGSTART1
|
||
.STRING "GAME START BY REX",0
|
||
.EVEN
|
||
MGSTART2
|
||
.STRING "GAME START BY BLOOP",0
|
||
.EVEN
|
||
MGSTART3
|
||
.STRING "GAME START BY SPIKE",0
|
||
.EVEN
|
||
MGSTART4
|
||
.STRING "GAME START BY GWEN",0
|
||
.EVEN
|
||
|
||
;
|
||
; A8 IS THE LEVEL ( 0 -> 3 ) TO USE
|
||
;
|
||
|
||
PGAMELEVEL
|
||
MMTM SP,A0,A1,A2,A3,A4,A8
|
||
SLL 5,A8
|
||
ADDI MGLEVELTAB,A8
|
||
MOVE *A8,A8,L
|
||
MOVI AUDONTIME,A0
|
||
CALLA GET_AUD
|
||
MOVK 1,A2
|
||
CALLA FORMATLINE
|
||
MMFM SP,A0,A1,A2,A3,A4,A8
|
||
RETS
|
||
|
||
MGLEVELTAB
|
||
.LONG MGLEVEL2, MGLEVEL3, MGLEVEL4, MGLEVEL1
|
||
|
||
MGLEVEL1
|
||
.STRING "INSTRUCTIONAL LEVEL",0
|
||
.EVEN
|
||
MGLEVEL2
|
||
.STRING "EASY LEVEL",0
|
||
.EVEN
|
||
MGLEVEL3
|
||
.STRING "ADVANCED LEVEL",0
|
||
.EVEN
|
||
MGLEVEL4
|
||
.STRING "EXPERT LEVEL",0
|
||
.EVEN
|
||
|
||
|
||
PGAMEEND
|
||
MMTM SP,A0,A1,A2,A3,A4,A8
|
||
CALLA GPLAYNUM ; ( OFF OF A2 )
|
||
SLL 5,A0
|
||
ADDI MGENDTAB,A0
|
||
MOVE *A0,A8,L
|
||
CALLR SETRED
|
||
MOVI AUDONTIME,A0
|
||
CALLA GET_AUD
|
||
MOVK 1,A2
|
||
CALLA FORMATLINE
|
||
CALLR SETBLACK
|
||
MOVI MGENDCREDS,A8
|
||
MOVE @GAMEUNITS,A1,W ; UNITS USED
|
||
CLR A2
|
||
CALLA FORMATLINE
|
||
MMFM SP,A0,A1,A2,A3,A4,A8
|
||
RETS
|
||
MGENDTAB
|
||
.LONG MGEND1, MGEND2, MGEND3, MGEND4
|
||
|
||
MGEND1 .STRING "GAME END BY REX",0
|
||
.EVEN
|
||
MGEND2 .STRING "GAME END BY BLOOP",0
|
||
.EVEN
|
||
MGEND3 .STRING "GAME END BY SPIKE",0
|
||
.EVEN
|
||
MGEND4 .STRING "GAME END BY GWEN",0
|
||
.EVEN
|
||
MGENDCREDS
|
||
.STRING "CREDITS USED",0
|
||
.EVEN
|
||
|
||
PGAMEBUYIN
|
||
MMTM SP,A0,A1,A2,A3,A4,A8
|
||
CALLA GPLAYNUM ; ( OFF OF A2 )
|
||
SLL 5,A0
|
||
ADDI MGBUYINTAB,A0
|
||
MOVE *A0,A8,L
|
||
MOVI AUDONTIME,A0
|
||
CALLA GET_AUD
|
||
MOVK 1,A2
|
||
CALLA FORMATLINE
|
||
MMFM SP,A0,A1,A2,A3,A4,A8
|
||
RETS
|
||
|
||
MGBUYINTAB
|
||
.LONG MGBUYIN1, MGBUYIN2, MGBUYIN3, MGBUYIN4
|
||
|
||
MGBUYIN1
|
||
.STRING "GAME BUYIN BY REX",0
|
||
.EVEN
|
||
MGBUYIN2
|
||
.STRING "GAME BUYIN BY BLOOP",0
|
||
.EVEN
|
||
MGBUYIN3
|
||
.STRING "GAME BUYIN BY SPIKE",0
|
||
.EVEN
|
||
MGBUYIN4
|
||
.STRING "GAME BUYIN BY GWEN",0
|
||
.EVEN
|
||
|
||
PIDIED
|
||
MMTM SP,A0,A1,A2,A3,A4,A8
|
||
CALLA GPLAYNUM ; ( OFF OF A2 )
|
||
SLL 5,A0
|
||
ADDI MGDEADTAB,A0
|
||
MOVE *A0,A8,L
|
||
MOVI AUDONTIME,A0
|
||
CALLA GET_AUD
|
||
MOVK 1,A2
|
||
CALLA FORMATLINE
|
||
MMFM SP,A0,A1,A2,A3,A4,A8
|
||
RETS
|
||
|
||
MGDEADTAB
|
||
.LONG MGDEAD1, MGDEAD2, MGDEAD3, MGDEAD4
|
||
|
||
MGDEAD1 .STRING "REX FINAL DEATH",0
|
||
.EVEN
|
||
MGDEAD2 .STRING "BLOOP FINAL DEATH",0
|
||
.EVEN
|
||
MGDEAD3 .STRING "SPIKE FINAL DEATH",0
|
||
.EVEN
|
||
MGDEAD4 .STRING "GWEN FINAL DEATH",0
|
||
.EVEN
|
||
|
||
PGAMEWAVE
|
||
MMTM SP,A0,A1,A2,A3,A4,A8
|
||
CALLA GPLAYNUM ; ( OFF OF A2 )
|
||
SLL 5,A0
|
||
ADDI DINO_TAB,A0
|
||
MOVE *A0,A0,L
|
||
MOVE A0,@WORKSTR,L ; STORE THE NAME
|
||
MOVI MGWAVE,A8
|
||
CALLA STRINGF
|
||
MOVI AUDONTIME,A0
|
||
CALLA GET_AUD
|
||
MOVK 1,A2
|
||
CALLA FORMATLINE
|
||
MMFM SP,A0,A1,A2,A3,A4,A8
|
||
RETS
|
||
|
||
MGWAVE .STRING "WAVE %d WON BY %p",0
|
||
.LONG WAVE
|
||
.LONG WORKSTR
|
||
.EVEN
|
||
|
||
SETRED
|
||
PUSH A0
|
||
MOVI 1BH,A0
|
||
CALLR PADDCHAR
|
||
MOVI 34H,A0
|
||
CALLR PADDCHAR
|
||
PULL A0
|
||
RETS
|
||
|
||
SETBLACK
|
||
PUSH A0
|
||
MOVI 1BH,A0
|
||
CALLR PADDCHAR
|
||
MOVI 35H,A0
|
||
CALLR PADDCHAR
|
||
PULL A0
|
||
RETS
|
||
|
||
PGAMECONT
|
||
MMTM SP,A0,A1,A2,A3,A4,A8
|
||
CALLA GPLAYNUM ; ( OFF OF A2 )
|
||
SLL 5,A0
|
||
ADDI MGCONTTAB,A0
|
||
MOVE *A0,A8,L
|
||
MOVI AUDONTIME,A0
|
||
CALLA GET_AUD
|
||
MOVK 1,A2
|
||
CALLA FORMATLINE
|
||
MMFM SP,A0,A1,A2,A3,A4,A8
|
||
RETS
|
||
|
||
MGCONTTAB
|
||
.LONG MGCONT1, MGCONT2, MGCONT3, MGCONT4
|
||
|
||
MGCONT1 .STRING "GAME CONTINUE BY REX",0
|
||
.EVEN
|
||
MGCONT2 .STRING "GAME CONTINUE BY BLOOP",0
|
||
.EVEN
|
||
MGCONT3 .STRING "GAME CONTINUE BY SPIKE",0
|
||
.EVEN
|
||
MGCONT4 .STRING "GAME CONTINUE BY GWEN",0
|
||
.EVEN
|
||
|
||
PGAMEWARP
|
||
MMTM SP,A0,A1,A2,A3,A4,A8
|
||
MOVI MGWARP,A8
|
||
CALLA STRINGF
|
||
MOVI AUDONTIME,A0
|
||
CALLA GET_AUD
|
||
MOVK 1,A2
|
||
CALLA FORMATLINE
|
||
MMFM SP,A0,A1,A2,A3,A4,A8
|
||
RETS
|
||
|
||
MGWARP .STRING "---> Warp to wave %d",0
|
||
.LONG TUNNEL
|
||
.EVEN
|
||
|
||
DINO_TAB:
|
||
.LONG P1NAME,P2NAME,P3NAME,P4NAME,0
|
||
P1NAME:
|
||
.STRING "REX",0
|
||
.EVEN
|
||
P2NAME:
|
||
.STRING "BLOOP",0
|
||
.EVEN
|
||
P3NAME:
|
||
.STRING "SPIKE",0
|
||
.EVEN
|
||
P4NAME:
|
||
.STRING "GWEN",0
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PBADGUY *
|
||
* *
|
||
* PLOT THE VARIOUS MESSAGES AS A GUY CLEARS CREDITS AND THINGS *
|
||
* *
|
||
* ENTRY *
|
||
* A0 WHICH MESSAGE TO PUT UP *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
* CALL *
|
||
* CALLA *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PBADGUY
|
||
MMTM SP,A0,A1,A2,A3,A4,A8
|
||
SLL 5,A0
|
||
ADDI PBCRUNCHER,A0
|
||
MOVE *A0,A8,L
|
||
MOVI AUDONTIME,A0
|
||
CALLA GET_AUD
|
||
MOVK 1,A2
|
||
CALLR SETRED
|
||
CALLA FORMATLINE
|
||
CALLR SETBLACK
|
||
MMFM SP,A0,A1,A2,A3,A4,A8
|
||
RETS
|
||
|
||
PBCRUNCHER:
|
||
.LONG PBSTR0,PBSTR1,PBSTR2,PBSTR3,PBSTR4,PBSTR5,PBSTR6,PBSTR7
|
||
.LONG PBSTR8,PBSTR9,PBSTR10
|
||
|
||
|
||
|
||
PBSTR0 .STRING "CLEAR COIN COUNTS",0
|
||
.EVEN
|
||
PBSTR1 .STRING "SET OPERATOR MESSAGE",0
|
||
.EVEN
|
||
PBSTR2 .STRING "CLEAR CREDITS",0
|
||
.EVEN
|
||
PBSTR3 .STRING "BOGUS MESSAGE",0
|
||
.EVEN
|
||
PBSTR4 .STRING "CLEAR GAME AUDITS",0
|
||
.EVEN
|
||
PBSTR5 .STRING "RESET HIGH SCORES",0
|
||
.EVEN
|
||
PBSTR6 .STRING "DEFAULT ADJUSTMENTS",0
|
||
.EVEN
|
||
PBSTR7 .STRING "FULL FACTORY RESTORE",0
|
||
.EVEN
|
||
PBSTR8 .STRING "ENTER TEST MODE",0
|
||
.EVEN
|
||
PBSTR9 .STRING "CMOS RESET, DUDE!",0
|
||
.EVEN
|
||
PBSTR10 .STRING "CMOS TOTALLY OUT TO LUNCH",0
|
||
.EVEN
|
||
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DOGGYPRINT *
|
||
* *
|
||
* SOMETHING HIT THE WATCH DOG -- BARK! *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
DOGGYPRINT:
|
||
PUSH A8
|
||
MOVI DOGMESS,A8
|
||
CALLR RAWPRINT ; AIN'T GOT NOTHING TO DO
|
||
PULL A8
|
||
CALLA READ_DIP
|
||
ANDI 40H,A0
|
||
JRNZ DOGGYDONE ; DON'T PRINT IF DS1-7 ON
|
||
CALLR DOGGYDUMP
|
||
DOGGYDONE
|
||
RETS
|
||
|
||
DOGMESS
|
||
.BYTE 0AH
|
||
.BYTE 1BH, 34H
|
||
.STRING "WATCH DOG RESET DETECTED"
|
||
.BYTE 1BH, 35H
|
||
.BYTE 0AH,0
|
||
.WORD 1
|
||
.WORD 0
|
||
.EVEN
|
||
|
||
DOGGYDUMP
|
||
.IF DEBUG
|
||
RETS ; DON'T LOCKUP ON THIS THING
|
||
.ENDIF
|
||
.IF YUNIT
|
||
.ELSE
|
||
RETS ; RETURN ON Z UNITS
|
||
.ENDIF
|
||
MMTM SP,A0,A1,A2,A8
|
||
MOVE @LASTA0,A0,L ; FAKE OUT THE SYSTEM
|
||
MOVE A0,@AREGFILE,L ; A0
|
||
MOVI AREGFILE+20H,A0
|
||
MOVE A1,*A0+,L
|
||
MOVE A2,*A0+,L
|
||
MOVE A3,*A0+,L
|
||
MOVE A4,*A0+,L
|
||
MOVE A5,*A0+,L
|
||
MOVE A6,*A0+,L
|
||
MOVE A7,*A0+,L
|
||
MOVE A8,*A0+,L
|
||
MOVE A9,*A0+,L
|
||
MOVE A10,*A0+,L
|
||
MOVE A11,*A0+,L
|
||
MOVE A12,*A0+,L
|
||
MOVE A13,*A0+,L
|
||
MOVE A14,*A0+,L
|
||
|
||
MOVI DUMPMESS,A8
|
||
CALLR RAWPRINTP
|
||
; MOVI DMTIME,A8
|
||
; MOVI AUDONTIME,A0
|
||
; CALLA GET_AUD
|
||
; MOVK 1,A2
|
||
; CALLA FORMATLINE
|
||
|
||
MOVI AREGPRINT,A8
|
||
CALLR RAWPRINTP
|
||
; CALLR NEWLINE
|
||
MOVE B0,@AREGFILE,L ; B0
|
||
MOVI AREGFILE+20H,B0
|
||
MOVE B1,*B0+,L
|
||
MOVE B2,*B0+,L
|
||
MOVE B3,*B0+,L
|
||
MOVE B4,*B0+,L
|
||
MOVE B5,*B0+,L
|
||
MOVE B6,*B0+,L
|
||
MOVE B7,*B0+,L
|
||
MOVE B8,*B0+,L
|
||
MOVE B9,*B0+,L
|
||
MOVE B10,*B0+,L
|
||
MOVE B11,*B0+,L
|
||
MOVE B12,*B0+,L
|
||
MOVE B13,*B0+,L
|
||
MOVE B14,*B0+,L
|
||
MOVE @AREGFILE,B0,L ; RESTORE B0
|
||
MOVI BREGPRINT,A8
|
||
CALLR RAWPRINTP
|
||
; CALLR NEWLINE
|
||
|
||
MOVI STACKLOC,A8
|
||
CALLR RAWPRINTP
|
||
|
||
MOVI 11,A2
|
||
MOVE @LASTSTACK,A1 ; GRAB WHAT WE SAW AS A STACK
|
||
; ADDI 0A0H,A1
|
||
MOVI AREGFILE,A0
|
||
RAWDSLOOP
|
||
MOVE *A1+,*A0+,L
|
||
DSJS A2,RAWDSLOOP
|
||
MOVI STACKPRINT,A8
|
||
CALLR RAWPRINTP
|
||
; CALLR NEWLINE
|
||
|
||
MMFM SP,A0,A1,A2,A8
|
||
|
||
RETS
|
||
|
||
STACKLOC
|
||
.STRING "STACK POINTER = %08lX",0AH,00
|
||
.LONG LASTSTACK
|
||
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGALIVE *
|
||
* *
|
||
* PRINT OUT A WELCOME TO TROG MESSAGE *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
TROGALIVE
|
||
.IF PRINTER
|
||
CREATE PRINT_PID,TROGPRINT
|
||
.ENDIF
|
||
RETS
|
||
|
||
TROGPRINT
|
||
MOVI TROGSTARTUP,A8
|
||
JSRP PRINTP
|
||
MOVI AUDUPTIME,A0
|
||
CALLA GET_AUD
|
||
MOVK 1,A2
|
||
MOVI PUPTIME,A8
|
||
CALLR FORMATLINE
|
||
MOVE @OFFTIME,A1,L
|
||
MOVI PALIVETIME,A8
|
||
MOVK 1,A2
|
||
CALLR FORMATLINE ; KICK OUT LAST ALIVE TIME
|
||
CALLR PRINTCREDS
|
||
DIE
|
||
|
||
TROGSTARTUP
|
||
.STRING "\bTROG!\b"
|
||
.STRING "\nVersion: %s"
|
||
.BYTE 0AH, 0
|
||
.WORD 1
|
||
.WORD 0
|
||
.LONG ROM_NAME
|
||
.EVEN
|
||
|
||
PRINTCREDS
|
||
MOVI TOTCREDS,A8
|
||
CLR A2
|
||
CALLA CRED_P ; CREDITS ON MACHINE
|
||
MOVE A0,A1
|
||
CALLR FORMATLINE
|
||
CALLR NEWLINE
|
||
RETS
|
||
|
||
TOTCREDS
|
||
.STRING "TOTAL GAME CREDITS",0
|
||
.EVEN
|
||
|
||
PUPTIME
|
||
.STRING "TOTAL GAME UPTIME",0
|
||
.EVEN
|
||
|
||
PALIVETIME
|
||
.STRING "TIME LAST ON FOR",0
|
||
.EVEN
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLCOIN *
|
||
* PRCOIN *
|
||
* PSCOIN *
|
||
* *
|
||
* PRINT OUT TIME STAMPS FOR THE COINS (LEFT,RIGHT,SERVICE) *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
* CALL *
|
||
* JSRP *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PLCOIN:
|
||
MOVI MLCOIN,A8
|
||
JRUC PCOIN
|
||
|
||
PRCOIN:
|
||
MOVI MRCOIN,A8
|
||
JRUC PCOIN
|
||
|
||
PSCOIN:
|
||
MOVI MSCOIN,A8
|
||
|
||
PCOIN:
|
||
MOVI AUDONTIME,A0
|
||
CALLA GET_AUD
|
||
MOVK 1,A2
|
||
CALLA FORMATLINE
|
||
RETP
|
||
|
||
MLCOIN .STRING "LEFT COIN",0
|
||
.EVEN
|
||
|
||
MRCOIN .STRING "RIGHT COIN",0
|
||
.EVEN
|
||
|
||
MSCOIN .STRING "SERVICE CREDIT",0
|
||
.EVEN
|
||
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PRINTAUDS *
|
||
* *
|
||
* PRINT OUT THE AUDIT TABLE *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PRINTAUDS:
|
||
.IF PRINTER
|
||
JSRP PRINTCOINAGE
|
||
|
||
MOVI PAUDHEADER,A8
|
||
JSRP PRINTP
|
||
|
||
MOVI PRINTAUDTABLE,A11
|
||
PALOOP
|
||
MOVE *A11+,A8,L ; GET TEXT STRING
|
||
JRZ PADONE
|
||
MOVE *A11+,A0,W ; WHICH AUDIT
|
||
MOVE *A11+,A2,W ; WHICH FORMAT
|
||
CALLA GET_AUD ; GET THE VALUE ( IN A1 )
|
||
CALLR FORMATLINE1
|
||
JRUC PALOOP
|
||
PADONE
|
||
SLEEP 5
|
||
CALLR PBUFCK
|
||
JRNZ PADONE ; EMPTY OUT THE BUFFER FIRST
|
||
.ENDIF
|
||
RETP
|
||
|
||
PAUDHEADER
|
||
.STRING "\n\n\bTrog Game Audits :\b\n",0
|
||
.WORD 1
|
||
.WORD 0
|
||
.EVEN
|
||
|
||
PCR
|
||
.BYTE 0AH,00H
|
||
.EVEN
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PRINTCOINAGE *
|
||
* *
|
||
* PRINT OUT THE COINAGE STUFF *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PRINTCOINAGE:
|
||
|
||
MOVI PCOINHEADER,A8
|
||
JSRP PRINTP
|
||
|
||
MOVI PRINTCOINTABLE,A11
|
||
PCLOOP
|
||
MOVE *A11+,A8,L ; GET TEXT STRING
|
||
JRZ PCDONE
|
||
MOVE *A11+,A0,W ; WHICH AUDIT
|
||
MOVE *A11+,A2,W ; WHICH FORMAT
|
||
CALLA GET_AUD ; GET THE VALUE ( IN A1 )
|
||
CALLR FORMATLINE1
|
||
JRUC PCLOOP
|
||
PCDONE
|
||
SLEEP 5
|
||
CALLR PBUFCK
|
||
JRNZ PCDONE ; EMPTY OUT THE BUFFER FIRST
|
||
RETP
|
||
|
||
PCOINHEADER
|
||
.STRING "\n\n\bTrog Coin Bookkeeping :\b\n",0
|
||
.WORD 1
|
||
.WORD 0
|
||
.EVEN
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FORMATLINE *
|
||
* *
|
||
* FORMAT A LINE FOR PRINTING ( LEFT ON RIGHT, VALUE ON RIGHT ) *
|
||
* *
|
||
* ENTRY *
|
||
* A1 VALUE *
|
||
* A2 FORMAT *
|
||
* A8 LEFT STRING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FORMATLINE1:
|
||
MMTM SP,A0,A5
|
||
JSRP PRINTP
|
||
JRUC FORMATLINEGO
|
||
|
||
FORMATLINE:
|
||
MMTM SP,A0,A5
|
||
JSRP NSPRINTP
|
||
FORMATLINEGO
|
||
CALLR SLEN ; LENGTH OF WHAT WE PLOTTED
|
||
MOVE A0,A5
|
||
MOVE A2,A2 ; SIMPLE NUMBER
|
||
JRNZ FLCK2
|
||
FLNUM
|
||
PUSH A0
|
||
MOVE A1,A0
|
||
MOVI MYSTRING,A7
|
||
CALLA CAT_A0
|
||
MOVI MYSTRING,A8
|
||
PULL A0
|
||
JRUC FLEND
|
||
FLCK2
|
||
CMPI 1,A2 ; CHECK FOR TIME
|
||
JRNZ FLCK3
|
||
MOVE A1,A3
|
||
CALLR FORMATTIME
|
||
JRUC FLEND
|
||
FLCK3
|
||
CMPI 2,A2 ; CHECK FOR TOTAL PLAYS
|
||
JRNZ FLCK4
|
||
CALLA GET_PLAYS
|
||
MOVE A2,A1
|
||
JRUC FLNUM
|
||
FLCK4
|
||
CMPI 3,A2 ; CHECK FOR TIME/CREDIT
|
||
JRNZ FLCK5
|
||
MMTM SP,A0,A1,A2
|
||
CLR A3
|
||
MOVI AUDNUMTC,A0
|
||
CALLA GET_AUD ; GET THE DIVISOR
|
||
MOVE A1,A2
|
||
JRZ DTCGO ; NO /0'S HERE, BUD
|
||
MOVI AUDAVGTC,A0
|
||
CALLA GET_AUD ; GET TOTAL TIME
|
||
CLR A0
|
||
DIVU A2,A0 ; A0 CONTAINS THE REAL NUMBER
|
||
MOVE A0,A3 ; NUMBER TO DISPLAY
|
||
DTCGO
|
||
MMFM SP,A0,A1,A2
|
||
CALLR FORMATTIME
|
||
JRUC FLEND
|
||
FLCK5
|
||
CMPI 4,A2
|
||
JRNZ FLCK6
|
||
MMTM SP,A0,A1,A2
|
||
CLR A3
|
||
MOVI AUDNUMTL,A0
|
||
CALLA GET_AUD ; GET THE DIVISOR
|
||
MOVE A1,A2
|
||
JRZ DTLGO ; NO /0'S HERE, BUD
|
||
MOVI AUDAVGTL,A0
|
||
CALLA GET_AUD ; GET TOTAL TIME
|
||
CLR A0
|
||
DIVU A2,A0 ; A0 CONTAINS THE REAL NUMBER
|
||
MOVE A0,A3 ; NUMBER TO DISPLAY
|
||
DTLGO
|
||
MMFM SP,A0,A1,A2
|
||
CALLR FORMATTIME
|
||
JRUC FLEND
|
||
|
||
FLCK6
|
||
CMPI 5,A2
|
||
JRNZ FLCK7
|
||
MMTM SP,A0,A1,A2
|
||
CLR A3
|
||
MOVI AUDNUMTG,A0
|
||
CALLA GET_AUD ; GET THE DIVISOR
|
||
MOVE A1,A2
|
||
JRZ DAWGO ; NO /0'S HERE, BUD
|
||
MOVI AUDWAVECNT,A0
|
||
CALLA GET_AUD ; GET TOTAL TIME
|
||
CLR A0
|
||
DIVU A2,A0 ; A0 CONTAINS THE REAL NUMBER
|
||
MOVE A0,A3 ; NUMBER TO DISPLAY
|
||
DAWGO
|
||
MMFM SP,A0,A1,A2
|
||
MOVE A3,A1
|
||
JRUC FLNUM
|
||
FLCK7
|
||
CMPI 6,A2
|
||
JRNZ FLCK8
|
||
MMTM SP,A0,A1,A2
|
||
CLR A3
|
||
MOVI AUDNUMTG,A0
|
||
CALLA GET_AUD ; GET THE DIVISOR
|
||
MOVE A1,A2
|
||
JRZ DACGO ; NO /0'S HERE, BUD
|
||
MOVI AUDAVGGC,A0
|
||
CALLA GET_AUD ; GET TOTAL CREDITS SPENT
|
||
CLR A0
|
||
DIVU A2,A0 ; A0 CONTAINS THE REAL NUMBER
|
||
MOVE A0,A3 ; NUMBER TO DISPLAY
|
||
DACGO
|
||
MMFM SP,A0,A1,A2
|
||
MOVE A3,A1
|
||
JRUC FLNUM
|
||
FLCK8
|
||
CMPI 7,A2
|
||
JRNZ FLCK9
|
||
MMTM SP,A0,A1,A2
|
||
CLR A3
|
||
MOVI AUDCONTOFFER,A0
|
||
CALLA GET_AUD ;CONTINUES OFFERED IS THE DIVISOR
|
||
MOVE A1,A2
|
||
JRZ DAPCTGO ;BR = 0 NOT ALLOWED IN THIS DIVIDE
|
||
|
||
MOVI AUDCONTTAKEN,A0
|
||
CALLA GET_AUD ;CONTINUES TAKEN IS THE DIVIDEND
|
||
MOVI 100,A0 ;MAKE IT A PERCENTAGE
|
||
MPYU A0,A1
|
||
DIVU A2,A1 ;AND GET IT
|
||
MOVE A1,A3 ;NUMBER TO DISPLAY
|
||
DAPCTGO
|
||
MMFM SP,A0,A1,A2
|
||
MOVE A3,A1
|
||
JRUC FLNUM
|
||
FLCK9
|
||
JRUC FLNOPLOT ; ANYTHING ELSE
|
||
|
||
FLEND
|
||
CALLR SLEN ; FIGURE OUT LENGTH OF STRING
|
||
ADD A5,A0 ; TOTAL LENGTH
|
||
MOVI 40,A1 ; 40 CHARS/LINE
|
||
SUB A0,A1
|
||
CALLR PSPACES ; PLOT THIS MANY SPACES
|
||
JSRP PSTRINGER ; PLOT OUT THE NUMBER
|
||
FLNOPLOT
|
||
MOVI PCR,A8
|
||
JSRP NSPRINTP
|
||
MMFM SP,A0,A5
|
||
RETS
|
||
|
||
NEWLINE
|
||
PUSH A8
|
||
MOVI PCR,A8
|
||
JSRP NSPRINTP
|
||
PULL A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FORMATTIME *
|
||
* *
|
||
* ENTRY *
|
||
* A3 TIME TO PLOT *
|
||
* *
|
||
* EXIT *
|
||
* A8 STRING POINTER *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FORMATTIME:
|
||
MMTM SP,A0,A1,A2,A7,A9,A10,A11
|
||
CLR A9 ; NO SECONDS
|
||
CLR A10 ; NO MINUTES
|
||
CLR A11 ; NO HOURS
|
||
MOVI MYSTRING,A7 ; STRING TO BUILD IN
|
||
MOVE A3,A1 ; BASE VALUE
|
||
JRZ PNOTIME
|
||
|
||
CLR A0 ; DIVIDEND IN <A0><A1>
|
||
MOVI 60,A2 ; 60 SECS/MINUTE
|
||
DIVU A2,A0 ; A0 = MINUTES, A1 = SECONDS
|
||
MOVE A1,A9 ; SET SECONDS
|
||
MOVE A0,A1 ; MINUTES/HOURS
|
||
JRZ PNOTIME
|
||
CLR A0
|
||
DIVU A2,A0 ; A0 = HOURS, A1 = MINUTES
|
||
MOVE A1,A10
|
||
MOVE A0,A11
|
||
|
||
PNOTIME
|
||
MOVE A11,A0
|
||
JRZ PNOHOURS
|
||
CALLA CAT_A0 ; HOURS
|
||
MOVI ME_COLON,A8
|
||
CALLA STRCAT
|
||
PNOHOURS
|
||
MOVE A10,A0
|
||
CMPI 10,A0
|
||
JRHS P1
|
||
CLR A0
|
||
CALLA CAT_A0 ; INSERT EXTRA ZERO
|
||
MOVE A10,A0
|
||
P1
|
||
CALLA CAT_A0 ; MINUTES
|
||
MOVI ME_COLON,A8
|
||
CALLA STRCAT
|
||
MOVE A9,A0
|
||
CMPI 10,A0
|
||
JRHS P2
|
||
CLR A0
|
||
CALLA CAT_A0 ; INSERT EXTRA ZERO
|
||
MOVE A9,A0
|
||
P2
|
||
CALLA CAT_A0 ; SECONDS
|
||
MMFM SP,A0,A1,A2,A7,A9,A10,A11
|
||
MOVI MYSTRING,A8
|
||
RETS
|
||
|
||
ME_COLON:
|
||
.STRING ":",0
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PSPACES *
|
||
* *
|
||
* PRINT OUT SOME SPACES *
|
||
* *
|
||
* ENTRY *
|
||
* A1 NUMBER OF SPACES *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PSPACES:
|
||
CMPI 0,A1
|
||
JRLS PDONE
|
||
MOVI 20H,A0
|
||
CALLR PADDCHAR
|
||
DEC A1
|
||
JRUC PSPACES
|
||
PDONE
|
||
RETS
|
||
|
||
SLEN
|
||
MMTM SP,A1,A8
|
||
CLR A0
|
||
SLOOP
|
||
MOVB *A8,A1
|
||
JRZ SDONE
|
||
ADDK 8,A8
|
||
INC A0
|
||
JRUC SLOOP
|
||
SDONE
|
||
MMFM SP,A1,A8
|
||
RETS
|
||
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PRINTP *
|
||
* *
|
||
* STRINGF A STRING AND PRINT IT OUT *
|
||
* *
|
||
* ENTRY *
|
||
* A8 STRING TO PRINT *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PRINTP:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9,A10,A11
|
||
CALLA READ_DIP ; CHECK IF PRINTER ENABLED
|
||
ANDI 80H,A0
|
||
JRNZ PRINTPRET
|
||
CALLA STRINGF
|
||
PUSHP A8
|
||
JSRP PSTRINGER
|
||
PULLP A8
|
||
PRINTPRET
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9,A10,A11
|
||
RETP
|
||
|
||
NSPRINTP:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
CALLA READ_DIP ; CHECK IF PRINTER ENABLED
|
||
ANDI 80H,A0
|
||
JRNZ NSPRINTPRET
|
||
JSRP PSTRINGER
|
||
NSPRINTPRET
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
RETP
|
||
|
||
RAWPRINTP:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
CALLA READ_DIP ; CHECK IF PRINTER ENABLED
|
||
ANDI 80H,A0
|
||
JRNZ RAWPRINTPRET
|
||
CALLA STRINGF
|
||
CALLR RAWPRINT
|
||
RAWPRINTPRET
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PSTRINGER *
|
||
* *
|
||
* OUTPUT A TEXT STRING TO THE LITTLE BABY PRINTER *
|
||
* *
|
||
* ENTRY *
|
||
* A8 WHAT TO PRINT *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PSTRINGER:
|
||
MMTM SP,A0,A1,A7,A8,A11
|
||
CALLR PRINT_P
|
||
JRNZ STRINGR2
|
||
CLR A0
|
||
MOVE A0,@PRINTERIN,W ; NOTHING GOING IN OR OUT
|
||
MOVE A0,@PRINTEROUT,W
|
||
CREATE PRINT_PID,PRINT_PROCESS ; GET A BACKGROUND PRINTER
|
||
|
||
STRINGR2
|
||
MOVB *A8,A7 ;GET A CHARACTER
|
||
SLL 24,A7
|
||
SRL 24,A7 ;MAKE SURE WE'RE POSITIVE
|
||
JREQ STRINGRX ;BR = STRING BE GONE BROTHA
|
||
ADDK 8,A8 ;NEXT BYTE
|
||
|
||
CMPI ' ',A7
|
||
JRHS STRNCHAR ;BR = IT'S KOSH BABY
|
||
|
||
;
|
||
; CHECK FOR CONTROL CHARACTERS
|
||
;
|
||
|
||
STRNCONT
|
||
CMPI NEW_SLEEP,A7 ; SLEEP?
|
||
JRNE STRCC1
|
||
MOVE *A8+,A0,W ; EAT IT
|
||
JRUC STRINGR2
|
||
STRCC1
|
||
CMPI NEW_PCOLOR,A7 ; COLOR
|
||
JRNE STRCC2
|
||
MOVE *A8+,A1,W ; GRAB THE NEW COLOR
|
||
JRZ SCC1BLK
|
||
MOVI 1BH,A0
|
||
CALLR PADDCHAR ; ESC
|
||
MOVI 34H,A0
|
||
CALLR PADDCHAR
|
||
JRUC STRINGR2
|
||
SCC1BLK
|
||
MOVI 1BH,A0
|
||
CALLR PADDCHAR
|
||
MOVI 35H,A0
|
||
CALLR PADDCHAR
|
||
JRUC STRINGR2
|
||
STRCC2
|
||
CMPI NEW_CONTROL,A7 ; DMA CONTROL FLAGS
|
||
JRNE STRCC3
|
||
MOVE *A8+,A0,W ; EAT IT
|
||
JRUC STRINGR2
|
||
STRCC3
|
||
CMPI NEW_FONT,A7 ; FONT
|
||
JRNE STRCC4
|
||
MOVE *A8+,A0,L ; SNAG IT
|
||
JRZ SCC3RES
|
||
MOVI 1BH,A0
|
||
CALLR PADDCHAR
|
||
MOVI 0EH,A0
|
||
CALLR PADDCHAR
|
||
JRUC STRINGR2
|
||
SCC3RES
|
||
MOVI 1BH,A0
|
||
CALLR PADDCHAR
|
||
MOVI 14H,A0
|
||
CALLR PADDCHAR
|
||
JRUC STRINGR2
|
||
STRCC4
|
||
CMPI NEW_XY,A7 ; NEW XY LOCATION
|
||
JRNE STRCC5
|
||
MOVE *A8+,A0,L ; EAT IT
|
||
JRUC STRINGR2
|
||
STRCC5
|
||
CMPI NEW_SPACING,A7 ; NEW SPACING
|
||
JRNE STRCC6
|
||
MOVE *A8+,A0,L ; EAT IT
|
||
JRUC STRINGR2
|
||
STRCC6
|
||
CMPI ASCII_CR,A7 ; CR
|
||
JRNZ STRCC7
|
||
MOVI 0AH,A7 ; SET TO SOMETHING USEFUL
|
||
JRUC STRNCHAR
|
||
STRCC7
|
||
CMPI ADD_DYDX,A7 ; DXDY CHANGE
|
||
JRNE STRCC8
|
||
MOVE *A8+,A0,L ; EAT IT
|
||
JRUC STRINGR2
|
||
STRCC8
|
||
; JRUC STRINGR2 ; TAKE A PILL, PASS CONTROL CODES TO PRINTER
|
||
;
|
||
; OUTPUT A CHARACTER HERE
|
||
;
|
||
STRNCHAR
|
||
MOVE A7,A0
|
||
CALLR PADDCHAR
|
||
; MOVE @PRINTERIN,A0,W
|
||
; MOVE A0,A1
|
||
; SLL 3,A0
|
||
; ADDI PRINTERBUF,A0
|
||
; MOVB A7,*A0
|
||
; INC A1
|
||
; ANDI PBUFSIZE-1,A1 ; WRAP IT
|
||
; MOVE A1,@PRINTERIN,W
|
||
JRUC STRINGR2
|
||
|
||
STRINGRX
|
||
MMFM SP,A0,A1,A7,A8,A11
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PADDCHAR *
|
||
* *
|
||
* ADD A CHARACTER IN A0 TO THE PRINTER BUFFER *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PADDCHAR:
|
||
MMTM SP,A1,A2
|
||
MOVE @PRINTERIN,A1,W
|
||
MOVE A1,A2
|
||
SLL 3,A1
|
||
ADDI PRINTERBUF,A1
|
||
MOVB A0,*A1
|
||
INC A2
|
||
ANDI PBUFSIZE-1,A2 ; WRAP IT
|
||
MOVE A2,@PRINTERIN,W
|
||
MOVE @PRINTEROUT,A1,W
|
||
CMP A1,A2
|
||
JRNZ PACOOL
|
||
NOP
|
||
PACOOL
|
||
MMFM SP,A1,A2
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PRINT_PROCESS *
|
||
* *
|
||
* JUST A PROCESS TO MANAGE THE PRINTER QUEUE AND TRY AND KEEP *
|
||
* THE GAME FROM LOCKING UP TOO MUCH WHEN IT RUNS OUT OF PAPER *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PRINT_TIMEOUT EQU 0FFH ; LOOP TIME FOR BUSY
|
||
PRINT_BURST EQU 50 ; MAX CHARS WITHOUT SLEEP
|
||
|
||
PRINT_PROCESS:
|
||
CALLA READ_DIP ; CHECK IF PRINTER ENABLED
|
||
ANDI 80H,A0
|
||
JRZ PRINTGO1
|
||
DIE
|
||
PP1
|
||
CLR A0
|
||
MOVE A0,@PRINTDEAD,W ; FLAG PRINTER AS UP
|
||
|
||
PRINTLOOP
|
||
SLEEP 3 ; EVERYBODY ELSE GETS A CHANCE
|
||
CALLA READ_DIP ; CHECK IF PRINTER ENABLED
|
||
ANDI 80H,A0
|
||
JRZ PRINTGO1
|
||
CLR A0
|
||
MOVE A0,@PRINTERIN,W
|
||
MOVE A0,@PRINTEROUT,W
|
||
DIE
|
||
PRINTGO1
|
||
MOVE @SWITCH,A0,W
|
||
ANDI 0C000H,A0
|
||
CMPI 4000H,A0
|
||
JRZ PPGOPRINT
|
||
CLR A0
|
||
MOVE A0,@PRINTERIN,W
|
||
MOVE A0,@PRINTEROUT,W
|
||
MOVK 1,A0
|
||
MOVE A0,@PRINTDEAD,W
|
||
SLEEP 100
|
||
JRUC PRINTLOOP
|
||
PPGOPRINT
|
||
CLR A4
|
||
MOVE @PRINTDEAD,A0,W
|
||
JRZ PPBURST ; BR = PRINTER HEALTHY
|
||
MOVE @SWITCH,A0,W
|
||
ANDI 80H,A0 ; CHECK IF STILL BUSY
|
||
JRNZ PRINTLOOP ; BR = BORING
|
||
PPBURST
|
||
MOVE @PRINTERIN,A0,W
|
||
MOVE @PRINTEROUT,A1,W
|
||
CMP A0,A1
|
||
JRZ PRINTLOOP ; BR = NOTHING TO OUTPUT
|
||
MOVE A1,A3
|
||
SLL 3,A1
|
||
ADDI PRINTERBUF,A1
|
||
MOVB *A1,A0 ; GET THE BYTE TO PRINT
|
||
|
||
ORI 0FF00H,A0 ; UNSET THE STROBE
|
||
MOVE A0,@SOUND,W
|
||
ANDI PRINTSTROBE,A0 ; SET THE STROBE
|
||
MOVE A0,@SOUND,W
|
||
ORI 0FF00H,A0
|
||
MOVE A0,@SOUND,W
|
||
MOVI PRINT_TIMEOUT,A2
|
||
PPLOOP
|
||
MOVE @SWITCH,A1,W
|
||
ANDI 80H,A1
|
||
JRZ PPOK
|
||
DSJS A2,PPLOOP ; LOOP WAITING FOR BUSY TO GO AWAY
|
||
;
|
||
; OK, SOMETHING WENT WRONG WITH THE PRINTER -- NEVER CAME BACK ALIVE
|
||
;
|
||
MOVK 1,A0
|
||
MOVE A0,@PRINTDEAD,W ; FLAG IT HISTORY
|
||
INC A3 ; OUTPUT POINTER
|
||
ANDI PBUFSIZE-1,A3 ; WRAP IT
|
||
MOVE A3,@PRINTEROUT,W
|
||
SLEEP 5 ; GIVE IT SOME SERIOUS TIME
|
||
JRUC PRINTLOOP ; TRY AGAIN
|
||
;
|
||
; ITS A HAPPENING PRINTER
|
||
;
|
||
PPOK
|
||
CLR A0
|
||
MOVE A0,@PRINTDEAD,W ; FLAG PRINTER AS UP
|
||
INC A3 ; OUTPUT POINTER
|
||
ANDI PBUFSIZE-1,A3 ; WRAP IT
|
||
MOVE A3,@PRINTEROUT,W
|
||
INC A4 ; CHARACTERS OUT THIS TIME
|
||
CMPI PRINT_BURST,A4
|
||
JRLO PPBURST ; BR = STILL IN BURST MODE
|
||
JRUC PRINTLOOP
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* RAWPRINT *
|
||
* *
|
||
* PRINT OUT A STRING OF CHARACTERS -- THIS WAITS FOR IT TO *
|
||
* FINISH OR DIE, BTW *
|
||
* *
|
||
* ENTRY *
|
||
* A8 LIST OF CHARS TO PRINT OUT *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
RAWTIMEOUT EQU 0FFFFFFFH ; RAW PRINTER TIMEOUT - GROSS, HUH?
|
||
|
||
RAWPRINT:
|
||
MMTM SP,A0,A1,A2,A3
|
||
RAWLOOP
|
||
CALLA READ_DIP ; CHECK IF PRINTER ENABLED
|
||
ANDI 80H,A0
|
||
JRNZ RAWDONE
|
||
|
||
MOVE @SWITCH,A0,W
|
||
ANDI 0C000H,A0
|
||
CMPI 4000H,A0
|
||
JRNZ RAWDONE ; ERROR/OUTOFPAPER
|
||
MOVB *A8,A0 ; GET THE BYTE TO PRINT
|
||
MOVE A0,A0
|
||
JRZ RAWDONE
|
||
ADDK 8,A8
|
||
ORI 0FF00H,A0 ; UNSET THE STROBE
|
||
MOVE A0,@SOUND,W
|
||
ANDI PRINTSTROBE,A0 ; SET THE STROBE
|
||
MOVE A0,@SOUND,W
|
||
ORI 0FF00H,A0
|
||
MOVE A0,@SOUND,W
|
||
MOVI RAWTIMEOUT,A2
|
||
CLR A3
|
||
RPWAIT
|
||
MOVE @SWITCH,A1,W
|
||
ANDI 80H,A1
|
||
JRZ RAWLOOP
|
||
INC A3
|
||
DSJS A2,RPWAIT ; LOOP WAITING FOR BUSY TO GO AWAY
|
||
RAWDONE
|
||
MMFM SP,A0,A1,A2,A3
|
||
RETS
|
||
|
||
PEMPTYWAIT:
|
||
SLEEP 5
|
||
CALLR PBUFCK
|
||
JRNZ PEMPTYWAIT ; EMPTY OUT THE BUFFER FIRST
|
||
RETP
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PBUFCK *
|
||
* *
|
||
* CHECKS TO SEE WHETHER THERE IS ANYTHING IN THE PRINTER BUFFER *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* .Z. EMPTY *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PBUFCK:
|
||
MMTM SP,A0,A1
|
||
CALLA READ_DIP
|
||
ANDI 80H,A0
|
||
JRZ PBU1
|
||
CLR A0
|
||
MOVE A0,A0
|
||
JRUC PBURET
|
||
PBU1
|
||
MOVE @PRINTERIN,A0,W
|
||
MOVE @PRINTEROUT,A1,W
|
||
CMP A0,A1
|
||
PBURET
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PRINT_P *
|
||
* *
|
||
* CHECK FOR THE EXISTENCE OF THE PRINTER BACKGROUND HANDLER *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* .EQ. NO *
|
||
* .NE. YES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PRINT_P MOVI PRINT_PID,A0 ; PRINTER PID ( DUH )
|
||
MOVI 0FFFFH,A1
|
||
CALLA EXISTP
|
||
RETS
|
||
|
||
.ENDIF
|
||
|
||
|