File Location: The Atari Museum Archives

Date: 01/15/04 - Archival Log.

 

 

* SHSC.S

*�������� HIGH SCORE CARD INTERFACE FOR THE 7800 GAME

*

*

*������������ POWER UP HIGH SCORE CARD INITIALIZATION

*���������������� THIS ROUTINE LOOKS FOR THE HIGH SCORE CARD (HSC) AND

*���������������� DISABLES ALL HSC SOFTWARE IF IT IS NOT FOUND.

*���������������� IF THE CARD IS PRESENT, A LIST IS FORMED TO IDENTIFY

*���������������� WHICH DIFFICULTY LEVELS HAVE HIGH SCORE TABLES ASSOCIATED

*���������������� WITH THEM.THIS INFO IS GOTTEN FROM THE HSCSTAT ROUTINE.

*

*���������������� THE LIST IS REFERENCED DURING IDLE MODE TO DETERMINE WHICH

*���������������� TABLES SHOULD BE DISPLAYED.

*

*�������������������� THIS PROCEDURE HAS NO ENTRY CONDITIONS

*�������������������� AND TRASHES ALL REGISTERS

*

 

*�������� PUBLICSETUPARG

*�������� EXTRN�� HSCIN,HSGAMDAT,DIFNAM,HSCSTAT,HSLSTEXP,GAMENAME,TEMPX

 

��������� ZERODEF

 

��������� RSEG��� CODE6

 

MAXLEVELEQU���� 4������ ���������������;MAX NO. OF DIFF LEVELS

 

*�������� DETERMINE IF THE HSC IS PRESENT

HSPOWNIT

��������� LDA���� $3900����������������� ;IF (MAGIC MEMORY LOCATIONS 3900

��������� CMP���� #$C6������������������ ;��� AND 3904 DONT MATCH THE

��������� BNE���HSCNOTPT�������������� ;��� DEFINED VALUES)

��������� LDA���� $3904

��������� CMP���� #$FE

��������� BEQ���� HSCHERE��������������� ;THEN

HSCNOTPTLDA���� #0�������������������� ;��� SET HSCIN FLAG TO ZERO,

��������� STA���� HSCIN�������������� ���;��� INDICATING HSC IS NOT IN

HSTUNE��� RTS��������������������������� ;END PROC

 

HSCHERE��������������������������������� ;ELSE

��������� LDA���� #$FF������������������ ;��� SET HSCIN FLAG TO NONZERO,

��������� STA���� HSCIN����������������� ;��� INDICATING HSC IS PRESENT

*������������������������������������������ ENDIF

 

��������� JSR���� SETUPARG�������������� ;SET UP ARGUMENTS FOR HSC

��������� JSR���� SETHSLST�������������� ;SET UP LIST OF WHAT DIFFICULTY

*���������������������������� ������������LEVELS HAVE HS TABLES

 

��������� RTS��������������������������� ;END HSPOWNIT

 

 

 

*������������ THIS ROUTINE SETS UP HSC ARGUMENTS THAT DONT CHANGE

*������������ OR ARE SIMPLY DEFAULT SETTINGS

*

*���������������� NO ENTRY CONDITONS

*���������������REG A IS TRASHED

*

 

SETUPARGLDA���� #0

��������� STA���� HSGAMDAT�������������� ;CART NUMBER

��������� STA���� HSGAMDAT+1

 

��������� LDA���� #1

��������� STA���� HSGAMDAT+3������������ ;USE JOYSTICK CONTROLLERS

 

 

��������� LDA ����#L(DIFNAM)������������ ;POINTER TO THE DIFFICULTY NAME FIELD

��������� STA���� HSGAMDAT+6

��������� LDA���� #H(DIFNAM)

��������� STA���� HSGAMDAT+7

 

��������� LDA���� #L(DLLIST)������������ ;SET UP POINTER TO THE DLL FOR THE

��������� STA���� HSGAMDAT+10����������� ;LOGO

��������� LDA���� #H(DLLIST)

��������� STA���� HSGAMDAT+11

 

��������� LDA���� #L(HSTUNE)������������ ;SET UP POINTER TO SOUND ROUTINE FOR

��������� STA���� HSGAMDAT+12����������� ;2ND,3RD,4TH,& 5TH PLACES.1ST

��������� LDA���� #H(HSTUNE)������������ ;PLACE GETS A DIFFERENT TUNE.

��������� STA���� HSGAMDAT+13

 

��������� LDA���� #4�������������������� ;WAIT 4 SECONDS DURING DISPLAY

��������� STA���� HSGAMDAT+14����������� ;OF HS DATA

 

��������� JSR���� INITLOGO�������� ������;RTS FOLLOWING CAN BE A JUMP

��������� RTS��������������������������� ;END SETUPARG PROC

 

 

 

 

*������������ THIS ROUTINE SETS UP A LIST OF WHICH DIFFICULTY LEVELS HAVE

*������������ HS TABLES SET UP ON THE HSC.

*

*���������������� NO ENTRY CONDITIONS

*���������������� A,X,Y TRASHED

*

 

SETHSLSTEQU���� *

��������� LDX���� #MAXLEVEL

��������� LDA���� #0

��������� STA���� HSGAMDAT+14����������� ;HOLD FOR ZERO SECONDS

 

HSCLOOP1TXA��������������������������� ;REPEAT

��������� ASL���� A��������������������� ;MODIFY DIFFICULTY LEVEL SO IT

��������� ASL���� A��������������������� ;CAN FIT IN THE UPPER 6 BITS

��������� STA���� HSGAMDAT+2������������ ;OF ITS ALLOCATED STORAGE.

��������� LDY���� #H(HSGAMDAT)���������� ;HSC REQUIRES HIGH BYTE OF ARGUMENT

*���������������������������������������� ADDRESS TO RESIDE IN Y REGISTER

 

��������� STX���� TEMPX

 

��������� JSR���� HSCSTAT��������������� ;CALL HSCSTAT(DIFLEVEL)

 

��������� LDX���� TEMPX

��������� STA���� HSLSTEXP-1,X���� ������;PUT HS TABLE STATUS INTO THE FLAG

*������������������������������������������ LIST. 0 = PRESENT

��������� DEX��������������������������� ;X := X-1

��������� BNE���� HSCLOOP1�������������� ;UNTIL (X=0, I.E. ALL DIF LEVELS

*������������������ ����������������������������������ARE CHECKED)

HSEND���� RTS��������������������������� ;END SETHSLST PROC

*

 

*�������� TEMPORARY ROUTINE TO ENTER A FINISHED GAME ONTO THE

*�������� HIGH SCORE CARD

*

*���������������� NO ENTRY CONDITIONS

*������� ���������A,X,Y TRASHED

 

*

*�������� EXTRN�� HSCIN,SETUPARG,DIFCULTY,SETDFNAM,HSLSTEXP

*�������� EXTRN�� HSGAMDAT,PLAYER1,PLAYER2,HSCENTER

 

HSGAMOVR

 

��������� LDA���� HSCIN����������������� ;IF (HSCIN=0)

��������� BEQ���� HSEND����������������� ; THEN /* HSC IS NOT PRESENT */ RETURN

 

��������� JSR���� SETUPARG�������������� ;SET UP ARGUMENT TABLE FOR HSC

��������� LDA���� #4�������������������� ;CONVERT DESERT FALCONS FRONTWARDS

��������� SEC��������������������������� ;DIFF LEVEL CODE TO MY BACKWARDS

��������� SBC���� DIFCULTY�������������� ;ENCODING. 0=EXPERT, 3=NOVICE

 

��������� JSR���� SETDFNAM�������������� ;SET UP DIFFICULTY NAME

 

��������� TAX

 

��������� ASL���� A��������������������� ;MOVE DIFF LEVEL OVER 2 BITS

��������� ASL�� ��A��������������������� ;AND PUT IN ARG LIST

��������� STA���� HSGAMDAT+2

 

��������� LDA���� #0�������������������� ;UPDATE OUR LIST OF WHICH DIFFICULTY

��������� STA���� HSLSTEXP-1,X���������� ;LEVELS HAVE HS TABLES

 

 

*�������� SET UP POINTER TO THE SCORES

��������� LDY���� #H(HSGAMDAT)

 

��������� LDA���� #L(PL1SCORE)

��������� STA���� HSGAMDAT+8

��������� LDA���� #H(PL1SCORE)���������� ;ZERO

��������� STA���� HSGAMDAT+9

 

��������� LDA���� #0

��������� STA���� HSGAMDAT+14

��������� JSR�� ��HSCSTAT��������������� ;TO RETURN PLACE IN TABLE

��������� BMI���� NEWTABL

 

��������� LDA���� HSGAMDAT+5������������ ;PLACE IN TABLE

��������� BMI���� NOPLACE

 

��������� BNE���� LOWERSC��������������� ;NOT TOP SCORE

 

NEWTABL

��������� LDA���� #HISCOR0

��������� JSR���� TUNIN

 

��������� LDA���� #HISCOR1

��������� JSR���� TUNIN

 

��������� JMP���� NOPLACE

 

LOWERSC

��������� LDA���� #LOSCOR0

��������� JSR���� TUNIN

 

��������� LDA���� #LOSCOR1

��������� JSR���� TUNIN

 

NOPLACE

 

����� ����LDA���� NUMPLYRS

��������� CMP���� #1

��������� BNE���� DISPLAY4

 

��������� LDA���� #4�������������������� ;ONE PLAYER GAME, DISPLAY TABLE FOR

��������� STA���� HSGAMDAT+14����������� ;FOUR SECONDS AFTER ENTERING INITIALS

 

 

DISPLAY4

��������� LDY���� #H(HSGAMDAT)

��������� JSR���� HSCENTER

 

��������� LDA���� NUMPLYRS

��������� CMP���� #1

��������� BEQ���� HSENDGO

 

��������� LDY���� #H(HSGAMDAT)

 

��������� LDA���� #L(PL2SCORE)

��������� STA���� HSGAMDAT+8

��������� LDA���� #H(PL2SCORE)

��������� STA���� HSGAMDAT+9

��������� INC���� HSGAMDAT+2������������ ;ADJUST FOR PLAYER 2

 

 

��������� JSR���� HSCSTAT��������������� ;TO RETURN PLACE IN TABLE

��������� BMI���� NEWTABL1

 

��������� LDA���� HSGAMDAT+5������������ ;PLACE IN TABLE

��������� BMI���� NOPLACE1

 

��������� BNE���� LOWERSC1�������������� ;NOT TOP SCORE

 

NEWTABL1

��������� LDA���� #HISCOR0

��������� JSR���� TUNIN

 

��������� LDA���� #HISCOR1

��������� JSR���� TUNIN

 

��������� JMP���� NOPLACE1

 

LOWERSC1

������ ���LDA���� #LOSCOR0

��������� JSR���� TUNIN

 

��������� LDA���� #LOSCOR1

��������� JSR���� TUNIN

 

NOPLACE1

 

��������� LDA���� #4�������������������� ;TWO PLAYER GAME, DISPLAY TABLE FOR

��������� STA���� HSGAMDAT+14����������� ;FOUR SECONDS AFTER ENTERING INITIALS

 

��������� LDY���� #H(HSGAMDAT)

��������� JSR���� HSCENTER

 

HSENDGO�� RTS��������������������������� ;END HSGAMOV

 

 

 

*

*

*

 

*���� HSDISP.S

*������ THIS FILE CONTAINS THE FOLLOWING PROCEDURES

*

*

*

*

 

 

*������������ THIS ROUTINE IS CALLED BETWEEN DISPLAY OF THE TITLE PAGE

*������������ AND THE ATTRACT MODE.IT DISPLAYS THE HIGH SCORES FROM EACH

*������������ DIFFICULTY LEVEL AS STORED ON THE HSC.

*

*���������������� NO ENTRY CONDITIONS

*���������������� A,X,Y TRASHED

*

 

*�������� PUBLICSETDFNAM

*�������� EXTRN�� HSCIN,HSGAMDAT,HSLSTEXP,HSCATRCT

*�������� EXTRN�� DIFNAM,DIFNAMAD,DFNMADAD,TEMPX

 

HSDISP

 

��������� LDA���� HSCIN����������������� ;IF (HSCIN=0)

��������� BEQ���� HSENDDIS�������������� ;THEN /*HSC IS NOT PRESENT */ RETURN

 

��������� JSR���� SETUPARG

 

��������� LDX���� #MAXLEVEL

HSCLOOP2EQU���� *��������������������� ;REPEAT

��������� LDA���� HSLSTEXP-1,X���������� ;IF (A HS TABLE HAS BEEN CREATED

*���������������������������������� ������������FOR THIS DIFFICULTY LEVEL)

��������� BNE���� HSNOTAB��������������� ;��� THEN

 

��������� TXA

��������� JSR���� SETDFNAM�������������� ;����� SET UP POINTER TO APPROPRIATE

*���������������������������������������������� DIFFICULTY NAME

�� �������TAX��������������������������� ;����� RESTORE X COUNTER

��������� ASL���� A��������������������� ;����� MODIFY DIFF LEVEL TO FIT IN

��������� ASL���� A��������������������� ;����� UPPER 6 BITS OF ARG STORAGE

��������� STA���� HSGAMDAT+2��������� ���;����� PLAYER NO. DOESNT MATTER

��������� LDY���� #H(HSGAMDAT)

��������� STX���� TEMPX

 

��������� JSR���� HSCATRCT�������������� ;����� DISPLAY HS TABLE

 

��������� LDX���� TEMPX

*�������������������������������������������� ENDIF

HSNOTAB�� DEX ���������������������������;X := X-1

��������� BNE���� HSCLOOP2�������������� ;UNTIL (X=0, ALL LEVELS CHECKED)

 

HSENDDISRTS��������������������������� ;END HSDISP

 

 

*������������ THIS ROUTINE SETS UP THE FIELD CONTAINING THE NAME OF A

*�������� ����PARTICULAR DIFFICULTY LEVEL.IT TAKES ADVANTAGE OF THE PREVIOUS

*������������ KNOWLEDGE THAT EACH NAME IS 8 CHARACTERS LONG (SOME ARE 6

*������������ PADDED WITH 2 BLANKS)

*

*���������������� ON ENTRY, REG A CONTAINS THE DIFFICULTY LEVEL

*������ ����������IN BACKWARDS NOTATION ... I.E., 0 IS EXPERT, 3 IS NOVICE

*

*���������������� X,Y REG ARE TRASHED

*���������������� REG A IS KEPT INTACT !!!

*

 

SETDFNAMEQU���� *

��������� PHA��������������������������� ;SAVE THE PARAMETER IN A

 

*����� ���FIRST BLANK OUT A 26 BYTE FIELD IN RAM

��������� LDX���� #26

��������� LDA���� #29������������������� ;WATKINS FUNNY NOTATION OF A BLANK

HSBLANK�� EQU���� *��������������������� ;REPEAT

��������� STA���� DIFNAM-1,X������������ ;STORE A BLANK

��� ������DEX��������������������������� ;X := X-1

��������� BNE���� HSBLANK��������������� ;UNTIL (X=0, ENTIRE FIELD BLANKED)

 

��������� PLA��������������������������� ;NOW WE NEED THE PARAMETER

��������� PHA��������������������������� ;BUT WE MUST KEEP IT FOR THE CALLER

 

*�������� LOAD THE APPROPRIATE NAME INTO THE RAM FIELD

��������� ASL���� A��������������������� ;DOUBLE THE DIFFICULTY LEVEL SO IT

��������� TAX��������������������������� ;CAN SERVE AS A INDEX INTO A TABLE

*���������������������� ������������������WITH 2 BYTE LONG ENTRIES

 

��������� LDA���� DIFNAMAD-2,X���������� ;INDEX INTO THE LIST OF ADDRESSES OF

*���������������������������������������� DIFFICULTY NAMES

��������� STA���� DFNMADAD�������������� ;AND LOAD THIS ADDRESS INTO THE

*���������������������������������������� ZERO-PAGE INDIRECT POINTER

��������� LDA���� DIFNAMAD-1,X

��������� STA���� DFNMADAD+1

 

��������� LDY���� #8

 

HSLOOP3�� EQU���� *��������������������� ;REPEAT

��������� LDA���� (DFNMADAD),Y���������� ;LOAD THE RAM BUFF WITH

��������� STA���� DIFNAM+8,Y������������ ;THE DIFF. NAME

��������� DEY��������������������������� ;Y := Y-1

��������� BNE���� HSLOOP3��������������� ;UNTIL (Y=0, ENTIRE NAME IS LOADED)

 

��������� PLA������������������������� ��;RESTORE REG A

��������� RTS

 

*�������� THIS IS THE TEXT FOR THE NAME OF THE DIFFICULTY LEVEL

*�������� IT IS STORED IN WATKINS CODE, NOT ASCII (DARN!)

 

BEGTEXT�� DB����� 29,13,14,21,8,2,4,29�� ;' NOVICE '

STDTEXT�� DB����� 18,19,0,13,3,0,17,3��� ;'STANDARD'

ADVTEXT�� DB����� 0,3,21,0,13,2,4,3����� ;'ADVANCED'

EXPTEXT�� DB����� 29,4,23,15,4,17,19,29;' EXPERT '

 

DIFNAMADDW����� EXPTEXT-1,ADVTEXT-1,STDTEXT-1,BEGTEXT-1

 

GAMENAMEDB����� 29,29,29,29,29,29

��������� DB����� 3,4,18,4,17,19,29,5,0,11,2,14,13

��������� DB����� 29,29,29,29,29,29,29

 

��������� END