HEX files now actually Intel Hex files

This commit is contained in:
Tor-Eirik Bakke Lunde 2020-03-03 23:32:07 +01:00
parent 8a4310ad55
commit 49f7b43401
38 changed files with 10779 additions and 10792 deletions

View File

@ -1,5 +1,5 @@
.CR 65C02
.TF readkey.hex,hex
.TF readkey.hex,INT
.LF readkey.list
;
; SMALL PROGRAM FOR THE BE6502 COMPUTER THAT SEEKS TO DEMONSTRATE THE GET KEY

View File

@ -1,5 +1,5 @@
.CR 65C02
.TF music.hex,hex
.TF music.hex,INT
.LF music.list
;
; MUSIC PLAYER FOR THE BE6502 USING '6502 GAMES' HARDWARE. BOARD SHOULD BE

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
.CR 65C02
.TF translate.hex,hex
.TF translate.hex,INT
.LF translate.list
;
; BINARY TRANSLATION GAME FOR THE BE6502 USING '6502 GAMES' HARDWARE. BOARD

View File

@ -1,5 +1,5 @@
.CR 65C02
.TF hexguess.hex,hex
.TF hexguess.hex,INT
.LF hexguess.list
;
; MUSIC PLAYER FOR THE BE6502 USING '6502 GAMES' HARDWARE. BOARD SHOULD BE

View File

@ -24,11 +24,11 @@
8003- I 12 ; 6522 VIA #1 ADDRESSES:
4004- I 13 TIMER .EQ VIA1+4 ; LOW LATCH OF TIMER 1
4003- I 14 DDR1A .EQ VIA1+3 ; PORT A DATA DIRECTION REGISTER
4003- I 15 DDR1B .EQ VIA1+3 ; PORT B DATA DIRECTION REGISTER
4002- I 15 DDR1B .EQ VIA1+2 ; PORT B DATA DIRECTION REGISTER
4001- I 16 PORT1A .EQ VIA1+1 ; PORT A
4000- I 17 PORT1B .EQ VIA1 ; PORT B
8003- I 18 ; 6522 VIA #3 ADDRESSES:
4C01- I 19 DDR3A .EQ VIA3+1 ; PORT A DATA DIRECTION REGISTER
4C03- I 19 DDR3A .EQ VIA3+3 ; PORT A DATA DIRECTION REGISTER
4C02- I 20 DDR3B .EQ VIA3+2 ; PORT B DATA DIRECTION REGISTER
4C00- I 21 PORT3B .EQ VIA3 ; PORT B
4C01- I 22 PORT3A .EQ VIA3+1 ; PORT A
@ -42,7 +42,7 @@
8003- I 30
8003-A9 FF I 31 ( 2) LDA #$FF ; SET UP DATA DIRECTION REGISTERS
8005-8D 03 40 I 32 ( 4) STA DDR1A
8008-8D 03 40 I 33 ( 4) STA DDR1B
8008-8D 02 40 I 33 ( 4) STA DDR1B
800B-8D 02 4C I 34 ( 4) STA DDR3B
800E-85 02 I 35 ( 3) STA DUR ; SET UP TONE DURATIONS.
8010-A9 0A I 36 ( 2) START LDA #$0A ; 10 GUESSES ALLOWED
@ -178,7 +178,7 @@
80DE- I 32 ; THE CODE.
80DE- I 33 ;
80DE-A9 00 I 34 ( 2) INITKEY LDA #0
80E0-8D 01 4C I 35 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
80E0-8D 03 4C I 35 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
80E3-A9 FF I 36 ( 2) LDA #$FF
80E5-8D 02 4C I 37 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
80E8-60 I 38 ( 6) RTS

View File

@ -1,5 +1,5 @@
.CR 65C02
.TF magicsquare.hex,hex
.TF magicsquare.hex,INT
.LF magicsquare.list
;
; MAGIC SQUARE GAME FOR THE KIM-1 USING '6502 GAMES' HARDWARE. BOARD SHOULD BE

View File

@ -1,3 +0,0 @@
A9008D03CCA9FF8D02CC2C01CC10FBA2
0F8E00CC2C01CC1005CA10F530F18AA0
12A2FF2C01CC30E7CAD0F888D0F360

View File

@ -1,40 +0,0 @@
0400- I 4 ; 'GETKEY' KEYBOARD INPUT ROUTINE READS AND DEBOUNCES KEYBOARD. RETURNS WITH
0400- I 5 ; KEY NUMBER IN ACCUMULATOR IF KEY DOWN. OPERATION: SENDS NUMBERS 0-F TO 74154
0400- I 6 ; (4 TO 16 LINE DECODER), WHICH GROUNDS ONE SIDE OF KEYSWITCHES ONE AT A TIME.
0400- I 7 ; IF A KEY IS DOWN, PA7 OF VIA #3 WILL BE GROUNDED, AND THE CURRENT VALUE
0400- I 8 ; APPLIED TO THE 74154 BE THE KEY NUMBER. WHEN THE PROGRAM DETECTS A KEY CLOSE
0400- I 9 ; CHECKS FOR KEY CLOSURE FOR 50 MS. TO ELIMINATE BOUNCE.
0400- I 10 ; NOTE: IF NO KEY IS PRESSED, GETKEY WILL WAIT.
0400- I 11 ;
0400- I 12 .OR $0400 ; NOTE: BOOK PLACES $0100 INSIDE STACK, BUT WE HAVE
0400- I 13 .TA $0400 ; MORE MEMORY SO WE ASSEMBLE AT 0400 INSTEAD.
0400- I 14
CC03- I 15 DDR3A .EQ $CC03 ; USING RC-ONE ADDRESS DECODING SCHEME, PLACING
CC02- I 16 DDR3B .EQ $CC02 ; VIA3 AT $CC00 BY DEFAULT (INSTEAD OF $AC00)
CC01- I 17 PORT3A .EQ $CC01 ; TO FIT RC-ONE ADDRESS DECODING THOUGH ORIGINAL
CC00- I 18 PORT3B .EQ $CC00 ; CAN BE JUMPERED IF NEEDED/WANTED.
0400- I 19
0400-A9 00 I 20 ( 2) LDA #0
0402-8D 03 CC I 21 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
0405-A9 FF I 22 ( 2) LDA #$FF
0407-8D 02 CC I 23 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
040A-2C 01 CC I 24 ( 4) START BIT PORT3A ; SEE IF KEY IS STILL DOWN FROM LAST KEY CLOSURE:
040D- I 25 ; KEYSTROBE IN 'N' STATUS BIT.
040D-10 FB I 26 (2**) BPL START ; IF YES, WAIT FOR KEY RELEASE
040F-A2 0F I 27 ( 2) RSTART LDX #15 ; SET KEY COUNTER TO 15
0411-8E 00 CC I 28 ( 4) NXTKEY STX PORT3B ; OUTPUT KEY # TO 74154
0414-2C 01 CC I 29 ( 4) BIT PORT3A ; SEE IF KEY DOWN: STROBE IN 'N'
0417-10 05 I 30 (2**) BPL BOUNCE ; IF YES, GO DEBOUNCE
0419-CA I 31 ( 2) DEX ; DECREMENT KEY #
041A-10 F5 I 32 (2**) BPL NXTKEY ; NO, DO NEXT KEY
041C-30 F1 I 33 (2**) BMI RSTART ; START OVER
041E-8A I 34 ( 2) BOUNCE TXA ; SAVE KEY NUMBER IN A
041F-A0 12 I 35 ( 2) LDY #$12 ; OUTER LOOP CNT LOAD FOR DELAY OF 50 MS.
0421-A2 FF I 36 ( 2) LP1 LDX #$FF ; INNER 11 US. LOOP
0423-2C 01 CC I 37 ( 4) LP2 BIT PORT3A ; SEE IF KEY STILL DOWN
0426-30 E7 I 38 (2**) BMI RSTART ; IF NOT, KEY NOT VALID, RESTART
0428-CA I 39 ( 2) DEX
0429-D0 F8 I 40 (2**) BNE LP2 ; THIS LOOP USES 2115*5 US.
042B-88 I 41 ( 2) DEY
042C-D0 F3 I 42 (2**) BNE LP1 ; OUTER LOOP: TOTAL IS 50 MS.
042E-60 I 43 ( 6) RTS ; DONE: KEY IN A.

View File

@ -1,5 +1,5 @@
.CR 6502
.TF readkey.hex,hex
.TF readkey.hex,INT
.LF readkey.list
;
; SMALL PROGRAM FOR THE KIM-1 COMPUTER THAT SEEKS TO DEMONSTRATE THE GET KEY
@ -14,6 +14,10 @@ INH .EQ $F9 ; INPUTBUFFER HI
SCANDS .EQ $1F1F ; MONITOR FUNCTION TO OUTPUT A DIGIT
VIA1 .EQ $C000
VIA3 .EQ $CC00
DDR3A .EQ VIA3+3 ; USING RC-ONE ADDRESS DECODING SCHEME, PLACING
DDR3B .EQ VIA3+2 ; VIA3 AT $CC00 BY DEFAULT (INSTEAD OF $AC00)
PORT3A .EQ VIA3+1 ; TO FIT RC-ONE ADDRESS DECODING THOUGH ORIGINAL
PORT3B .EQ VIA3 ; CAN BE JUMPERED IF NEEDED/WANTED.
.OR $0200
.TA $0200

View File

@ -1,5 +1,6 @@
A9008D03CCA9FF8D02CCA90085FB85FA
85F920270285F9201F1F4C1202A9008D
03CCA9FF8D02CC2C01CC10FBA20F8E00
CC2C01CC1005CA10F530F18AA012A2FF
2C01CC30E7CAD0F888D0F360
:10020000A9008D03CCA9FF8D02CCA90085FB85FA3E
:1002100085F9201D0285F9201F1F4C12022C01CCEC
:1002200010FBA20F8E00CC2C01CC1005CA10F530AB
:10023000F18AA012A2FF2C01CC30E7CAD0F888D0F6
:0D024000F360A9008D03CCA9FF8D02CC60F6
:00000001FF

View File

@ -11,23 +11,27 @@
1F1F- 14 SCANDS .EQ $1F1F ; MONITOR FUNCTION TO OUTPUT A DIGIT
C000- 15 VIA1 .EQ $C000
CC00- 16 VIA3 .EQ $CC00
0000- 17
0200- 18 .OR $0200
0200- 19 .TA $0200
0200-A9 00 20 ( 2) RC_ONE LDA #0
0202-8D 03 CC 21 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
0205-A9 FF 22 ( 2) LDA #$FF
0207-8D 02 CC 23 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
020A-A9 00 24 ( 2) LDA #0
020C-85 FB 25 ( 2) STA POINTH
020E-85 FA 26 ( 2) STA POINTL
0210-85 F9 27 ( 2) STA INH
0212-20 27 02 28 ( 6) LOOP JSR GETKEY ; GET THE KEY USING THE SUB-ROUTINE FROM THE BOOK,
0215-85 F9 29 ( 2) STA INH ; WE'LL HAVE IT IN A SO STORE IT TO DATA DIGITS.
0217-20 1F 1F 30 ( 6) JSR SCANDS ; HAVE THE MONITOR OUTPUT THE VALUE
021A-4C 12 02 31 ( 3) JMP LOOP ; DO IT ALL AGAIN
021D- 32
021D- 33 .IN ../../common/CH01-Getkey/getkey_routine.asm
CC03- 17 DDR3A .EQ VIA3+3 ; USING RC-ONE ADDRESS DECODING SCHEME, PLACING
CC02- 18 DDR3B .EQ VIA3+2 ; VIA3 AT $CC00 BY DEFAULT (INSTEAD OF $AC00)
CC01- 19 PORT3A .EQ VIA3+1 ; TO FIT RC-ONE ADDRESS DECODING THOUGH ORIGINAL
CC00- 20 PORT3B .EQ VIA3 ; CAN BE JUMPERED IF NEEDED/WANTED.
0000- 21
0200- 22 .OR $0200
0200- 23 .TA $0200
0200-A9 00 24 ( 2) RC_ONE LDA #0
0202-8D 03 CC 25 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
0205-A9 FF 26 ( 2) LDA #$FF
0207-8D 02 CC 27 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
020A-A9 00 28 ( 2) LDA #0
020C-85 FB 29 ( 2) STA POINTH
020E-85 FA 30 ( 2) STA POINTL
0210-85 F9 31 ( 2) STA INH
0212-20 1D 02 32 ( 6) LOOP JSR GETKEY ; GET THE KEY USING THE SUB-ROUTINE FROM THE BOOK,
0215-85 F9 33 ( 2) STA INH ; WE'LL HAVE IT IN A SO STORE IT TO DATA DIGITS.
0217-20 1F 1F 34 ( 6) JSR SCANDS ; HAVE THE MONITOR OUTPUT THE VALUE
021A-4C 12 02 35 ( 3) JMP LOOP ; DO IT ALL AGAIN
021D- 36
021D- 37 .IN ../../common/CH01-Getkey/getkey_routine.asm
021D- I 1 ; 'GETKEY' KEYBOARD INPUT ROUTINE READS AND DEBOUNCES KEYBOARD. RETURNS WITH
021D- I 2 ; KEY NUMBER IN ACCUMULATOR IF KEY DOWN. OPERATION: SENDS NUMBERS 0-F TO 74154
021D- I 3 ; (4 TO 16 LINE DECODER), WHICH GROUNDS ONE SIDE OF KEYSWITCHES ONE AT A TIME.
@ -36,33 +40,34 @@ CC00- 16 VIA3 .EQ $CC00
021D- I 6 ; CHECKS FOR KEY CLOSURE FOR 50 MS. TO ELIMINATE BOUNCE.
021D- I 7 ; NOTE: IF NO KEY IS PRESSED, GETKEY WILL WAIT.
021D- I 8 ;
CC03- I 9 DDR3A .EQ VIA3+3 ; USING RC-ONE ADDRESS DECODING SCHEME, PLACING
CC02- I 10 DDR3B .EQ VIA3+2 ; VIA3 AT $CC00 BY DEFAULT (INSTEAD OF $AC00)
CC01- I 11 PORT3A .EQ VIA3+1 ; TO FIT RC-ONE ADDRESS DECODING THOUGH ORIGINAL
CC00- I 12 PORT3B .EQ VIA3 ; CAN BE JUMPERED IF NEEDED/WANTED.
021D- I 13
021D-A9 00 I 14 ( 2) LDA #0
021F-8D 03 CC I 15 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
0222-A9 FF I 16 ( 2) LDA #$FF
0224-8D 02 CC I 17 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
0227-2C 01 CC I 18 ( 4) GETKEY BIT PORT3A ; SEE IF KEY IS STILL DOWN FROM LAST KEY CLOSURE:
022A- I 19 ; KEYSTROBE IN 'N' STATUS BIT.
022A-10 FB I 20 (2**) BPL GETKEY ; IF YES, WAIT FOR KEY RELEASE
022C-A2 0F I 21 ( 2) RSTART LDX #15 ; SET KEY COUNTER TO 15
022E-8E 00 CC I 22 ( 4) NXTKEY STX PORT3B ; OUTPUT KEY # TO 74154
0231-2C 01 CC I 23 ( 4) BIT PORT3A ; SEE IF KEY DOWN: STROBE IN 'N'
0234-10 05 I 24 (2**) BPL BOUNCE ; IF YES, GO DEBOUNCE
0236-CA I 25 ( 2) DEX ; DECREMENT KEY #
0237-10 F5 I 26 (2**) BPL NXTKEY ; NO, DO NEXT KEY
0239-30 F1 I 27 (2**) BMI RSTART ; START OVER
023B-8A I 28 ( 2) BOUNCE TXA ; SAVE KEY NUMBER IN A
023C-A0 12 I 29 ( 2) LDY #$12 ; OUTER LOOP CNT LOAD FOR DELAY OF 50 MS.
023E-A2 FF I 30 ( 2) LP1 LDX #$FF ; INNER 11 US. LOOP
0240-2C 01 CC I 31 ( 4) LP2 BIT PORT3A ; SEE IF KEY STILL DOWN
0243-30 E7 I 32 (2**) BMI RSTART ; IF NOT, KEY NOT VALID, RESTART
0245-CA I 33 ( 2) DEX
0246-D0 F8 I 34 (2**) BNE LP2 ; THIS LOOP USES 2115*5 US.
0248-88 I 35 ( 2) DEY
0249-D0 F3 I 36 (2**) BNE LP1 ; OUTER LOOP: TOTAL IS 50 MS.
024B-60 I 37 ( 6) RTS ; DONE: KEY IN A.
024C- 34
021D-2C 01 CC I 9 ( 4) GETKEY BIT PORT3A ; SEE IF KEY IS STILL DOWN FROM LAST KEY CLOSURE:
0220- I 10 ; KEYSTROBE IN 'N' STATUS BIT.
0220-10 FB I 11 (2**) BPL GETKEY ; IF YES, WAIT FOR KEY RELEASE
0222-A2 0F I 12 ( 2) RSTART LDX #15 ; SET KEY COUNTER TO 15
0224-8E 00 CC I 13 ( 4) NXTKEY STX PORT3B ; OUTPUT KEY # TO 74154
0227-2C 01 CC I 14 ( 4) BIT PORT3A ; SEE IF KEY DOWN: STROBE IN 'N'
022A-10 05 I 15 (2**) BPL BOUNCE ; IF YES, GO DEBOUNCE
022C-CA I 16 ( 2) DEX ; DECREMENT KEY #
022D-10 F5 I 17 (2**) BPL NXTKEY ; NO, DO NEXT KEY
022F-30 F1 I 18 (2**) BMI RSTART ; START OVER
0231-8A I 19 ( 2) BOUNCE TXA ; SAVE KEY NUMBER IN A
0232-A0 12 I 20 ( 2) LDY #$12 ; OUTER LOOP CNT LOAD FOR DELAY OF 50 MS.
0234-A2 FF I 21 ( 2) LP1 LDX #$FF ; INNER 11 US. LOOP
0236-2C 01 CC I 22 ( 4) LP2 BIT PORT3A ; SEE IF KEY STILL DOWN
0239-30 E7 I 23 (2**) BMI RSTART ; IF NOT, KEY NOT VALID, RESTART
023B-CA I 24 ( 2) DEX
023C-D0 F8 I 25 (2**) BNE LP2 ; THIS LOOP USES 2115*5 US.
023E-88 I 26 ( 2) DEY
023F-D0 F3 I 27 (2**) BNE LP1 ; OUTER LOOP: TOTAL IS 50 MS.
0241-60 I 28 ( 6) RTS ; DONE: KEY IN A.
0242- I 29 ;
0242- I 30 ; SUBROUTINE 'INITKEY'
0242- I 31 ; TAKES CARE OF INITIALIZING VIA #3 FOR USING WITH THE GETKEY ROUTINE FROM
0242- I 32 ; THE CODE.
0242- I 33 ;
0242-A9 00 I 34 ( 2) INITKEY LDA #0
0244-8D 03 CC I 35 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
0247-A9 FF I 36 ( 2) LDA #$FF
0249-8D 02 CC I 37 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
024C-60 I 38 ( 6) RTS
024D- 38

View File

@ -1,5 +1,5 @@
.CR 6502
.TF music.hex,hex
.TF music.hex,INT
.LF music.list
;
; MUSIC PLAYER FOR THE KIM-1 USING '6502 GAMES' HARDWARE. BOARD SHOULD BE

View File

@ -1,18 +1,19 @@
200603A90085001820E102C90FD00520
8A0290EFC90ED006204B021890EA8501
207302A500C9FFD005208A0290DA4AA8
A501B009290F990003E60090CB0A0A0A
0A190003990003E60090BDA2008602A5
024AAABD0003B004290F900629F04A4A
4A4A207302A220209F02E602A502C500
90DF60C90DD006A254209F0260AABDD4
028504BDC70220AB0260A9FF8504A94B
20AB02A93820AB02A94B20AB021860A0
FFEAD00088D0FACAD0F5608503A9FF8D
02CCA900A604A40388189000D0FA49FF
8D00CCCAD0F060FEE2C9BEA9968E867E
7770645E55606B72808F94A1AAB5BFD7
E42C01CC10FBA20F8E00CC2C01CC1005
CA10F530F18AA012A2FF2C01CC30E7CA
D0F888D0F360A9008D03CCA9FF8D02CC
60
:10020000200603A90085001820E102C90FD00520AF
:100210008A0290EFC90ED006204B021890EA8501A1
:10022000207302A500C9FFD005208A0290DA4AA8EF
:10023000A501B009290F990003E60090CB0A0A0A2C
:100240000A190003990003E60090BDA2008602A5EA
:10025000024AAABD0003B004290F900629F04A4AB9
:100260004A4A207302A220209F02E602A502C5008E
:1002700090DF60C90DD006A254209F0260AABDD4B1
:10028000028504BDC70220AB0260A9FF8504A94B0B
:1002900020AB02A93820AB02A94B20AB021860A00A
:1002A000FFEAD00088D0FACAD0F5608503A9FF8D97
:1002B00002CCA900A604A40388189000D0FA49FF34
:1002C0008D00CCCAD0F060FEE2C9BEA9968E867EB3
:1002D0007770645E55606B72808F94A1AAB5BFD7AA
:1002E000E42C01CC10FBA20F8E00CC2C01CC10050D
:1002F000CA10F530F18AA012A2FF2C01CC30E7CA57
:10030000D0F888D0F360A9008D03CCA9FF8D02CC72
:01031000608C
:00000001FF

View File

@ -1,5 +1,5 @@
.CR 6502
.TF translate.hex,hex
.TF translate.hex,INT
.LF translate.list
;
; BINARY TRANSLATION GAME FOR THE KIM-1 USING '6502 GAMES' HARDWARE. BOARD

View File

@ -1,18 +1,19 @@
A9FF8D03C08D02C08D02CCA9008D03CC
85058506A9798D01C0A9008D00C08502
8501208C02A5028504A5018503A93C8D
01C0A9018D00C0A90085028501208C02
A501C503F0049027B008A502C504901F
B000A9F08D00C0A9008D01C0A94020E4
02E605A90AC505D0ABA9F020CC0260A9
0E8D00C0A9008D01C0A94020E402E606
A90AC506D08EA90E20CC026020F50220
E40220F502290F8507AABD08030D00C0
8D00C020B602C407F00BA9012D00C08D
00C04C8C0260A00F8C00CC2C01CC100B
8810F5E602D0EFE601D0EB60A2148601
8502A5024D00C08D00C0A90A20E402C6
01D0EF608500A010A2FFCAD0FD88D0F8
C600D0F26038A509650C650D8508A204
B5089509CA10F960028222A2129232B2
0A8A2AAA1A9A3ABA
:10020000A9FF8D03C08D02C08D02CCA9008D03CC47
:1002100085058506A9798D01C0A9008D00C08502DC
:100220008501208C02A5028504A5018503A93C8DCA
:1002300001C0A9018D00C0A90085028501208C02A2
:10024000A501C503F0049027B008A502C504901FBE
:10025000B000A9F08D00C0A9008D01C0A94020E424
:1002600002E605A90AC505D0ABA9F020CC0260A919
:100270000E8D00C0A9008D01C0A94020E402E60651
:10028000A90AC506D08EA90E20CC026020F5022056
:10029000E40220F502290F8507AABD08030D00C05E
:1002A0008D00C020B602C407F00BA9012D00C08D3F
:1002B00000C04C8C0260A00F8C00CC2C01CC100B29
:1002C0008810F5E602D0EFE601D0EB60A2148601BB
:1002D0008502A5024D00C08D00C0A90A20E402C617
:1002E00001D0EF608500A010A2FFCAD0FD88D0F831
:1002F000C600D0F26038A509650C650D8508A2041A
:10030000B5089509CA10F960028222A2129232B28F
:080310000A8A2AAA1A9A3ABAD5
:00000001FF

View File

@ -50,26 +50,26 @@ CC03- I 17 DDR3A .EQ VIA3+3
0208-8D 02 CC I 38 ( 4) STA DDR3B
020B-A9 00 I 39 ( 2) LDA #0
020D-8D 03 CC I 40 ( 4) STA DDR3A
0210-85 05 I 41 ( 3) STA PLYR1 ; CLEAR NUMBER OF WINS.
0212-85 06 I 42 ( 3) STA PLYR2
0210-85 05 I 41 ( 2) STA PLYR1 ; CLEAR NUMBER OF WINS.
0212-85 06 I 42 ( 2) STA PLYR2
0214-A9 79 I 43 ( 2) MOVE LDA #%01111001
0216-8D 01 C0 I 44 ( 4) STA PORT1A ; SHOW RIGHT ARROW
0219-A9 00 I 45 ( 2) LDA #0
021B-8D 00 C0 I 46 ( 4) STA PORT1B
021E-85 02 I 47 ( 3) STA CNTLO ; CLEAR COUNTERS
0220-85 01 I 48 ( 3) STA CNTHI
021E-85 02 I 47 ( 2) STA CNTLO ; CLEAR COUNTERS
0220-85 01 I 48 ( 2) STA CNTHI
0222-20 8C 02 I 49 ( 6) JSR PLAY ; GET PLAYER 1S TIME.
0225-A5 02 I 50 ( 3) LDA CNTLO ; TRANSFER TEMP COUNT TO PERMANENT STORAGE
0227-85 04 I 51 ( 3) STA CNT1L
0227-85 04 I 51 ( 2) STA CNT1L
0229-A5 01 I 52 ( 3) LDA CNTHI
022B-85 03 I 53 ( 3) STA CNT1H
022B-85 03 I 53 ( 2) STA CNT1H
022D-A9 3C I 54 ( 2) LDA #%00111100 ; SHOW LEFT ARROW
022F-8D 01 C0 I 55 ( 4) STA PORT1A
0232-A9 01 I 56 ( 2) LDA #1
0234-8D 00 C0 I 57 ( 4) STA PORT1B
0237-A9 00 I 58 ( 2) LDA #0
0239-85 02 I 59 ( 3) STA CNTLO ; CLEAR COUNTERS
023B-85 01 I 60 ( 3) STA CNTHI
0239-85 02 I 59 ( 2) STA CNTLO ; CLEAR COUNTERS
023B-85 01 I 60 ( 2) STA CNTHI
023D-20 8C 02 I 61 ( 6) JSR PLAY ; GET PLAYER 2S TIME.
0240-A5 01 I 62 ( 3) LDA CNTHI ; GET PLAYER 2S COUNT AND...
0242-C5 03 I 63 ( 3) CMP CNT1H ; COMPARE TO PLAYER 1S.
@ -115,7 +115,7 @@ CC03- I 17 DDR3A .EQ VIA3+3
028F-20 E4 02 I 103 ( 6) JSR DELAY ; RANDOM - LENGTH DELAY.
0292-20 F5 02 I 104 ( 6) JSR RANDOM ; GET ANOTHER
0295-29 0F I 105 ( 2) AND #$0F ; KEEP UNDER 16 FOR USE AS
0297-85 07 I 106 ( 3) STA NUMBER ; NUMBER TO GUESS.
0297-85 07 I 106 ( 2) STA NUMBER ; NUMBER TO GUESS.
0299-AA I 107 ( 2) TAX ; USE AS INDEX TO ...
029A-BD 08 03 I 108 ( 4*) LDA NUMTAB,X ; GET REVERSED PATTERN FROM TABLE
029D-0D 00 C0 I 109 ( 4) ORA PORT1B ; TO DISPLAY IN LEDS 12-15.
@ -149,7 +149,7 @@ CC03- I 17 DDR3A .EQ VIA3+3
02CC- I 137 ;
02CC-A2 14 I 138 ( 2) BLINK LDX #20 ; 20 BLINKS.
02CE-86 01 I 139 ( 3) STX CNTHI ; SET BLINK COUNTER.
02D0-85 02 I 140 ( 3) STA CNTLO ; BLINK REGISTER
02D0-85 02 I 140 ( 2) STA CNTLO ; BLINK REGISTER
02D2-A5 02 I 141 ( 3) BLOOP LDA CNTLO ; GET BLINK PATTERN
02D4-4D 00 C0 I 142 ( 4) EOR PORT1B ; BLINK LEDS.
02D7-8D 00 C0 I 143 ( 4) STA PORT1B
@ -162,7 +162,7 @@ CC03- I 17 DDR3A .EQ VIA3+3
02E4- I 150 ; SUBROUTINE 'DELAY'
02E4- I 151 ; CONTENTS OF ACCUMULATOR DETERMINES DELAY LENGTH.
02E4- I 152 ;
02E4-85 00 I 153 ( 3) DELAY STA TEMP
02E4-85 00 I 153 ( 2) DELAY STA TEMP
02E6-A0 10 I 154 ( 2) DL1 LDY #$10
02E8-A2 FF I 155 ( 2) DL2 LDX #$FF
02EA-CA I 156 ( 2) DL3 DEX
@ -180,7 +180,7 @@ CC03- I 17 DDR3A .EQ VIA3+3
02F6-A5 09 I 168 ( 3) LDA SCR+1
02F8-65 0C I 169 ( 3) ADC SCR+4
02FA-65 0D I 170 ( 3) ADC SCR+5
02FC-85 08 I 171 ( 3) STA SCR
02FC-85 08 I 171 ( 2) STA SCR
02FE-A2 04 I 172 ( 2) LDX #4
0300-B5 08 I 173 ( 4) RNDLP LDA SCR,X
0302-95 09 I 174 ( 4) STA SCR+1,X

View File

@ -1,5 +1,5 @@
.CR 6502
.TF hexguess.hex,hex
.TF hexguess.hex,INT
.LF hexguess.list
;
; HEX GUESSING GAME FOR THE KIM-1 USING '6502 GAMES' HARDWARE. BOARD SHOULD BE

View File

@ -1,15 +1,16 @@
A9FF8D03C08D03C08D02CC8502A90A85
01A9008D01C08D00C0AD04C08504A920
20960220B6020A0A0A0A850020B60229
0F05008500A50438E500B00549FF3869
00A200DDAD02B027E8E009D0F6A90B85
00A9FF8D01C08D00C0A932209602A9FF
4D01C08D01C08D00C0C600D0ECF09EE8
A9008D00C0208E028D01C09005A9018D
00C0C601D098A9BE2096024C0D02A900
382ACAD0FB608503A900A602A4038818
9000D0FA49FF8D00CCCAD0F060C88040
2010080402012C01CC10FBA20F8E00CC
2C01CC1005CA10F530F18AA012A2FF2C
01CC30E7CAD0F888D0F360A9008D01CC
A9FF8D02CC60
:1002000020DE02A9FF8D03C08D02C08D02CC8502C5
:10021000A90A8501A9008D01C08D00C0AD04C0856B
:1002200004A92020990220B9020A0A0A0A8500209E
:10023000B902290F05008500A50438E500B005497D
:10024000FF386900A200DDB002B027E8E009D0F66F
:10025000A90B8500A9FF8D01C08D00C0A93220998E
:1002600002A9FF4D01C08D01C08D00C0C600D0ECB9
:10027000F09EE8A9008D00C02091028D01C090057C
:10028000A9018D00C0C601D098A9BE2099024C10CA
:1002900002A900382ACAD0FB608503A900A602A4DF
:1002A0000388189000D0FA49FF8D00CCCAD0F060C6
:1002B000C880402010080402012C01CC10FBA20FC2
:1002C0008E00CC2C01CC1005CA10F530F18AA0129A
:1002D000A2FF2C01CC30E7CAD0F888D0F360A90087
:0902E0008D03CCA9FF8D02CC6056
:00000001FF

View File

@ -8,176 +8,177 @@ CC00- 10 VIA3 .EQ $CC00
0000- 11
0200- 12 .OR $0200
0200- 13 .TA $0200
0200- 14 .IN ../../common/CH04-Hexguess/game.asm
0200- I 1 ; 'HEXGUESS'
0200- I 2 ; HEXADECIMAL NUMBER GUESSING GAME.
0200- I 3 ; THE OBJECT OF THE GAME IS TO GUESS A HEXADECIMAL NUMBER THAT THE COMPUTER HAS
0200- I 4 ; THOUGHT UP. WHEN THE COMPUTER 'BEEPS', A GUESS SHOULD BE ENTERED. GUESSES ARE
0200- I 5 ; TWO DIGIT HEXADECIMAL NUMBERS, WHEN TWO DIGITS HAVE BEEN RECEIVED THE
0200- I 6 ; COMPUTER WILL DISPLAY THE NEARNESS OF THE GUESS BY LIGHTING A NUMBER OF LEDS
0200- I 7 ; PROPORTIONAL TO THE CLOSENESS OF THE GUESS. TEN GUESSES ARE ALLOWED. IF A
0200- I 8 ; GUESS IS CORRECT, THEN THE COMPUTER WILL FLASH THE LEDS AND MAKE A WARBLING
0200- I 9 ; TONE.
0200- I 10 ;
0200- I 11 ;
0200- I 12 ; 6522 VIA #1 ADDRESSES:
0200-20 DE 02 14 ( 6) RCONE JSR INITKEY
0203- 15 .IN ../../common/CH04-Hexguess/game.asm
0203- I 1 ; 'HEXGUESS'
0203- I 2 ; HEXADECIMAL NUMBER GUESSING GAME.
0203- I 3 ; THE OBJECT OF THE GAME IS TO GUESS A HEXADECIMAL NUMBER THAT THE COMPUTER HAS
0203- I 4 ; THOUGHT UP. WHEN THE COMPUTER 'BEEPS', A GUESS SHOULD BE ENTERED. GUESSES ARE
0203- I 5 ; TWO DIGIT HEXADECIMAL NUMBERS, WHEN TWO DIGITS HAVE BEEN RECEIVED THE
0203- I 6 ; COMPUTER WILL DISPLAY THE NEARNESS OF THE GUESS BY LIGHTING A NUMBER OF LEDS
0203- I 7 ; PROPORTIONAL TO THE CLOSENESS OF THE GUESS. TEN GUESSES ARE ALLOWED. IF A
0203- I 8 ; GUESS IS CORRECT, THEN THE COMPUTER WILL FLASH THE LEDS AND MAKE A WARBLING
0203- I 9 ; TONE.
0203- I 10 ;
0203- I 11 ;
0203- I 12 ; 6522 VIA #1 ADDRESSES:
C004- I 13 TIMER .EQ VIA1+4 ; LOW LATCH OF TIMER 1
C003- I 14 DDR1A .EQ VIA1+3 ; PORT A DATA DIRECTION REGISTER
C003- I 15 DDR1B .EQ VIA1+3 ; PORT B DATA DIRECTION REGISTER
C002- I 15 DDR1B .EQ VIA1+2 ; PORT B DATA DIRECTION REGISTER
C001- I 16 PORT1A .EQ VIA1+1 ; PORT A
C000- I 17 PORT1B .EQ VIA1 ; PORT B
0200- I 18 ; 6522 VIA #3 ADDRESSES:
CC01- I 19 DDR3A .EQ VIA3+1 ; PORT A DATA DIRECTION REGISTER
0203- I 18 ; 6522 VIA #3 ADDRESSES:
CC03- I 19 DDR3A .EQ VIA3+3 ; PORT A DATA DIRECTION REGISTER
CC02- I 20 DDR3B .EQ VIA3+2 ; PORT B DATA DIRECTION REGISTER
CC00- I 21 PORT3B .EQ VIA3 ; PORT B
CC01- I 22 PORT3A .EQ VIA3+1 ; PORT A
0200- I 23 ; STORAGES:
0203- I 23 ; STORAGES:
0000- I 24 ZP .EQ $00
0000- I 25 GUESS .EQ ZP
0001- I 26 GUESSN .EQ ZP+1
0002- I 27 DUR .EQ ZP+2
0003- I 28 FREQ .EQ ZP+3
0004- I 29 NUMBER .EQ ZP+4
0200- I 30
0200-A9 FF I 31 ( 2) LDA #$FF ; SET UP DATA DIRECTION REGISTERS
0202-8D 03 C0 I 32 ( 4) STA DDR1A
0205-8D 03 C0 I 33 ( 4) STA DDR1B
0208-8D 02 CC I 34 ( 4) STA DDR3B
020B-85 02 I 35 ( 2) STA DUR ; SET UP TONE DURATIONS.
020D-A9 0A I 36 ( 2) START LDA #$0A ; 10 GUESSES ALLOWED
020F-85 01 I 37 ( 2) STA GUESSN
0211-A9 00 I 38 ( 2) LDA #0 ; BLANK LEDS
0213-8D 01 C0 I 39 ( 4) STA PORT1A
0216-8D 00 C0 I 40 ( 4) STA PORT1B
0219-AD 04 C0 I 41 ( 4) LDA TIMER ; GET RANDOM NUMBER TO GUESS
021C-85 04 I 42 ( 2) STA NUMBER ; ... AND SAVE.
021E-A9 20 I 43 ( 2) GETGES LDA #$20 ; SET UP SHORT HIGH TONE TO SIGNAL USER TO
0220- I 44 ; INPUT GUESS.
0220-20 96 02 I 45 ( 6) JSR TONE ; MAKE BEEP.
0223-20 B6 02 I 46 ( 6) JSR GETKEY ; GET HIGH ORDER USER GUESS
0226-0A I 47 ( 2) ASL A ; SHIFT INTO HIGH ORDER POSITION
0227-0A I 48 ( 2) ASL A
0228-0A I 49 ( 2) ASL A
0229-0A I 50 ( 2) ASL A
022A-85 00 I 51 ( 2) STA GUESS ; SAVE
022C-20 B6 02 I 52 ( 6) JSR GETKEY ; GET LOW ORDER USER GUESS
022F-29 0F I 53 ( 2) AND #%00001111 ; MASK HIGH ORDER BITS.
0231-05 00 I 54 ( 3) ORA GUESS ; ADD HIGH ORDER NIBBLE.
0233-85 00 I 55 ( 2) STA GUESS ; FINAL PRODUCT SAVED.
0235-A5 04 I 56 ( 3) LDA NUMBER ; GET NUMBER FOR COMPARE
0237-38 I 57 ( 2) SEC ; SUBTRACT GUESS FROM NUMBER TO DETERMINE THE
0238-E5 00 I 58 ( 3) SBC GUESS ; NEARNESS OF THE GUESS.
023A-B0 05 I 59 (2**) BCS ALRIGHT ; POSITIVE VALUE NEEDS NO FIX.
023C-49 FF I 60 ( 2) EOR #%11111111 ; MAKE DISTANCE ABSOLUTE
023E-38 I 61 ( 2) SEC ; MAKE IT A TWO'S COMPLEMENT
023F-69 00 I 62 ( 2) ADC #00 ; ... NOT JUST A ONE'S COMPLEMENT.
0241-A2 00 I 63 ( 2) ALRIGHT LDX #00 ; SET CLOSENESS COUNTER TO DISTANT
0243-DD AD 02 I 64 ( 4*) LOOP CMP LIMITS,X ; COMPARE NEARNESS OF GUESS TO TABLE OF LIMITS
0246- I 65 ; TO SEE HOW MANY LIGHTS TO LIGHT.
0246-B0 27 I 66 (2**) BCS SIGNAL ; NEARNESS IS BIGGER THAN LIMIT, SO GO
0248- I 67 ; LIGHT INDICATOR INSTEAD.
0248-E8 I 68 ( 2) INX ; LOOK AT NEXT CLOSENESS LEVEL.
0249-E0 09 I 69 ( 2) CPX #9 ; ALL NINE LEVELS TRIED?
024B-D0 F6 I 70 (2**) BNE LOOP ; NO, TRY NEXT LEVEL.
024D-A9 0B I 71 ( 2) WIN LDA #11 ; YES; WIN! LOAD NUMBER OF BLINKS
024F-85 00 I 72 ( 2) STA GUESS ; USE GUESS AS TEMP
0251-A9 FF I 73 ( 2) LDA #$FF ; LIGHT LEDS
0253-8D 01 C0 I 74 ( 4) STA PORT1A
0256-8D 00 C0 I 75 ( 4) STA PORT1B
0259-A9 32 I 76 ( 2) WOW LDA #50 ; TONE VALUE
025B-20 96 02 I 77 ( 6) JSR TONE ; MAKE WIN SIGNAL
025E-A9 FF I 78 ( 2) LDA #$FF
0260-4D 01 C0 I 79 ( 4) EOR PORT1A ; COMPLEMENT PORTS
0263-8D 01 C0 I 80 ( 4) STA PORT1A
0266-8D 00 C0 I 81 ( 4) STA PORT1B
0269-C6 00 I 82 ( 5) DEC GUESS ; BLINKS/TONES DONE?
026B-D0 EC I 83 (2**) BNE WOW ; NO, DO AGAIN.
026D-F0 9E I 84 (2**) BEQ START ; YES, START NEW GAME.
026F-E8 I 85 ( 2) SIGNAL INX ; INCREMENT CLOSENESS LEVEL COUNTER SO AT
0270- I 86 ; LEAST 1 LED IS LIT.
0270-A9 00 I 87 ( 2) LDA #0 ; CLEAR HIGH LED PORT
0272-8D 00 C0 I 88 ( 4) STA PORT1B
0275-20 8E 02 I 89 ( 6) JSR LITE ; GET LED PATTERN
0278-8D 01 C0 I 90 ( 4) STA PORT1A ; SET LEDS
027B-90 05 I 91 (2**) BCC CC ; IF CARRY SET PB0 = 1
027D-A9 01 I 92 ( 2) LDA #01
027F-8D 00 C0 I 93 ( 4) STA PORT1B
0282-C6 01 I 94 ( 5) CC DEC GUESSN ; ONE GUESS USED
0284-D0 98 I 95 (2**) BNE GETGES ; SOME LEFT, GET NEXT.
0286-A9 BE I 96 ( 2) LDA #$BE ; LOW TONE SIGNALS LOSE
0288-20 96 02 I 97 ( 6) JSR TONE
028B-4C 0D 02 I 98 ( 3) JMP START ; NEW GAME
028E- I 99 ;
028E- I 100 ; SUBROUTINE 'LITE'
028E- I 101 ; ROUTINE TO MAKE PATTERN OF LIT LEDS BY SHIFTING A STRING OF ONES TO THE
028E- I 102 ; LEFT IN THE ACCUMULATOR UNTIL THE BIT POSITION CORRESPONDING TO THE NUMBER
028E- I 103 ; IN X IS REACHED.
028E- I 104 ;
028E-A9 00 I 105 ( 2) LITE LDA #0 ; CLEAR ACCUMULATOR FOR PATTERN
0290-38 I 106 ( 2) SHIFT SEC ; MAKE LOW BIT HIGH.
0291-2A I 107 ( 2) ROL A ; SHIFT IT IN
0292-CA I 108 ( 2) DEX ; ONE BIT DONE...
0293-D0 FB I 109 (2**) BNE SHIFT ; LOOP IF NOT DONE.
0295-60 I 110 ( 6) RTS ; RETURN
0296- I 111 ;
0296- I 112 ; SUBROUTINE 'TONE'
0296- I 113 ; TONE GENERATION ROUTINE.
0296- I 114 ;
0296-85 03 I 115 ( 2) TONE STA FREQ
0298-A9 00 I 116 ( 2) LDA #0
029A-A6 02 I 117 ( 3) LDX DUR
029C-A4 03 I 118 ( 3) FL2 LDY FREQ
029E-88 I 119 ( 2) FL1 DEY
029F-18 I 120 ( 2) CLC
02A0-90 00 I 121 (2**) BCC FL0 ; (.+2 IN BOOK)
02A2-D0 FA I 122 (2**) FL0 BNE FL1
02A4-49 FF I 123 ( 2) EOR #$FF
02A6-8D 00 CC I 124 ( 4) STA PORT3B
02A9-CA I 125 ( 2) DEX
02AA-D0 F0 I 126 (2**) BNE FL2
02AC-60 I 127 ( 6) RTS
02AD- I 128 ;
02AD- I 129 ; TABLE OF LIMITS FOR CLOSENESS LEVELS.
02AD- I 130 ;
02AD-C8 80 40 20
0203- I 30
0203-A9 FF I 31 ( 2) LDA #$FF ; SET UP DATA DIRECTION REGISTERS
0205-8D 03 C0 I 32 ( 4) STA DDR1A
0208-8D 02 C0 I 33 ( 4) STA DDR1B
020B-8D 02 CC I 34 ( 4) STA DDR3B
020E-85 02 I 35 ( 2) STA DUR ; SET UP TONE DURATIONS.
0210-A9 0A I 36 ( 2) START LDA #$0A ; 10 GUESSES ALLOWED
0212-85 01 I 37 ( 2) STA GUESSN
0214-A9 00 I 38 ( 2) LDA #0 ; BLANK LEDS
0216-8D 01 C0 I 39 ( 4) STA PORT1A
0219-8D 00 C0 I 40 ( 4) STA PORT1B
021C-AD 04 C0 I 41 ( 4) LDA TIMER ; GET RANDOM NUMBER TO GUESS
021F-85 04 I 42 ( 2) STA NUMBER ; ... AND SAVE.
0221-A9 20 I 43 ( 2) GETGES LDA #$20 ; SET UP SHORT HIGH TONE TO SIGNAL USER TO
0223- I 44 ; INPUT GUESS.
0223-20 99 02 I 45 ( 6) JSR TONE ; MAKE BEEP.
0226-20 B9 02 I 46 ( 6) JSR GETKEY ; GET HIGH ORDER USER GUESS
0229-0A I 47 ( 2) ASL A ; SHIFT INTO HIGH ORDER POSITION
022A-0A I 48 ( 2) ASL A
022B-0A I 49 ( 2) ASL A
022C-0A I 50 ( 2) ASL A
022D-85 00 I 51 ( 2) STA GUESS ; SAVE
022F-20 B9 02 I 52 ( 6) JSR GETKEY ; GET LOW ORDER USER GUESS
0232-29 0F I 53 ( 2) AND #%00001111 ; MASK HIGH ORDER BITS.
0234-05 00 I 54 ( 3) ORA GUESS ; ADD HIGH ORDER NIBBLE.
0236-85 00 I 55 ( 2) STA GUESS ; FINAL PRODUCT SAVED.
0238-A5 04 I 56 ( 3) LDA NUMBER ; GET NUMBER FOR COMPARE
023A-38 I 57 ( 2) SEC ; SUBTRACT GUESS FROM NUMBER TO DETERMINE THE
023B-E5 00 I 58 ( 3) SBC GUESS ; NEARNESS OF THE GUESS.
023D-B0 05 I 59 (2**) BCS ALRIGHT ; POSITIVE VALUE NEEDS NO FIX.
023F-49 FF I 60 ( 2) EOR #%11111111 ; MAKE DISTANCE ABSOLUTE
0241-38 I 61 ( 2) SEC ; MAKE IT A TWO'S COMPLEMENT
0242-69 00 I 62 ( 2) ADC #00 ; ... NOT JUST A ONE'S COMPLEMENT.
0244-A2 00 I 63 ( 2) ALRIGHT LDX #00 ; SET CLOSENESS COUNTER TO DISTANT
0246-DD B0 02 I 64 ( 4*) LOOP CMP LIMITS,X ; COMPARE NEARNESS OF GUESS TO TABLE OF LIMITS
0249- I 65 ; TO SEE HOW MANY LIGHTS TO LIGHT.
0249-B0 27 I 66 (2**) BCS SIGNAL ; NEARNESS IS BIGGER THAN LIMIT, SO GO
024B- I 67 ; LIGHT INDICATOR INSTEAD.
024B-E8 I 68 ( 2) INX ; LOOK AT NEXT CLOSENESS LEVEL.
024C-E0 09 I 69 ( 2) CPX #9 ; ALL NINE LEVELS TRIED?
024E-D0 F6 I 70 (2**) BNE LOOP ; NO, TRY NEXT LEVEL.
0250-A9 0B I 71 ( 2) WIN LDA #11 ; YES; WIN! LOAD NUMBER OF BLINKS
0252-85 00 I 72 ( 2) STA GUESS ; USE GUESS AS TEMP
0254-A9 FF I 73 ( 2) LDA #$FF ; LIGHT LEDS
0256-8D 01 C0 I 74 ( 4) STA PORT1A
0259-8D 00 C0 I 75 ( 4) STA PORT1B
025C-A9 32 I 76 ( 2) WOW LDA #50 ; TONE VALUE
025E-20 99 02 I 77 ( 6) JSR TONE ; MAKE WIN SIGNAL
0261-A9 FF I 78 ( 2) LDA #$FF
0263-4D 01 C0 I 79 ( 4) EOR PORT1A ; COMPLEMENT PORTS
0266-8D 01 C0 I 80 ( 4) STA PORT1A
0269-8D 00 C0 I 81 ( 4) STA PORT1B
026C-C6 00 I 82 ( 5) DEC GUESS ; BLINKS/TONES DONE?
026E-D0 EC I 83 (2**) BNE WOW ; NO, DO AGAIN.
0270-F0 9E I 84 (2**) BEQ START ; YES, START NEW GAME.
0272-E8 I 85 ( 2) SIGNAL INX ; INCREMENT CLOSENESS LEVEL COUNTER SO AT
0273- I 86 ; LEAST 1 LED IS LIT.
0273-A9 00 I 87 ( 2) LDA #0 ; CLEAR HIGH LED PORT
0275-8D 00 C0 I 88 ( 4) STA PORT1B
0278-20 91 02 I 89 ( 6) JSR LITE ; GET LED PATTERN
027B-8D 01 C0 I 90 ( 4) STA PORT1A ; SET LEDS
027E-90 05 I 91 (2**) BCC CC ; IF CARRY SET PB0 = 1
0280-A9 01 I 92 ( 2) LDA #01
0282-8D 00 C0 I 93 ( 4) STA PORT1B
0285-C6 01 I 94 ( 5) CC DEC GUESSN ; ONE GUESS USED
0287-D0 98 I 95 (2**) BNE GETGES ; SOME LEFT, GET NEXT.
0289-A9 BE I 96 ( 2) LDA #$BE ; LOW TONE SIGNALS LOSE
028B-20 99 02 I 97 ( 6) JSR TONE
028E-4C 10 02 I 98 ( 3) JMP START ; NEW GAME
0291- I 99 ;
0291- I 100 ; SUBROUTINE 'LITE'
0291- I 101 ; ROUTINE TO MAKE PATTERN OF LIT LEDS BY SHIFTING A STRING OF ONES TO THE
0291- I 102 ; LEFT IN THE ACCUMULATOR UNTIL THE BIT POSITION CORRESPONDING TO THE NUMBER
0291- I 103 ; IN X IS REACHED.
0291- I 104 ;
0291-A9 00 I 105 ( 2) LITE LDA #0 ; CLEAR ACCUMULATOR FOR PATTERN
0293-38 I 106 ( 2) SHIFT SEC ; MAKE LOW BIT HIGH.
0294-2A I 107 ( 2) ROL A ; SHIFT IT IN
0295-CA I 108 ( 2) DEX ; ONE BIT DONE...
0296-D0 FB I 109 (2**) BNE SHIFT ; LOOP IF NOT DONE.
0298-60 I 110 ( 6) RTS ; RETURN
0299- I 111 ;
0299- I 112 ; SUBROUTINE 'TONE'
0299- I 113 ; TONE GENERATION ROUTINE.
0299- I 114 ;
0299-85 03 I 115 ( 2) TONE STA FREQ
029B-A9 00 I 116 ( 2) LDA #0
029D-A6 02 I 117 ( 3) LDX DUR
029F-A4 03 I 118 ( 3) FL2 LDY FREQ
02A1-88 I 119 ( 2) FL1 DEY
02A2-18 I 120 ( 2) CLC
02A3-90 00 I 121 (2**) BCC FL0 ; (.+2 IN BOOK)
02A5-D0 FA I 122 (2**) FL0 BNE FL1
02A7-49 FF I 123 ( 2) EOR #$FF
02A9-8D 00 CC I 124 ( 4) STA PORT3B
02AC-CA I 125 ( 2) DEX
02AD-D0 F0 I 126 (2**) BNE FL2
02AF-60 I 127 ( 6) RTS
02B0- I 128 ;
02B0- I 129 ; TABLE OF LIMITS FOR CLOSENESS LEVELS.
02B0- I 130 ;
02B0-C8 80 40 20
10 08 04 02
01 I 131 LIMITS .HS C8.80.40.20.10.08.04.02.01
02B6- 15 .IN ../../common/CH01-Getkey/getkey_routine.asm
02B6- I 1 ; 'GETKEY' KEYBOARD INPUT ROUTINE READS AND DEBOUNCES KEYBOARD. RETURNS WITH
02B6- I 2 ; KEY NUMBER IN ACCUMULATOR IF KEY DOWN. OPERATION: SENDS NUMBERS 0-F TO 74154
02B6- I 3 ; (4 TO 16 LINE DECODER), WHICH GROUNDS ONE SIDE OF KEYSWITCHES ONE AT A TIME.
02B6- I 4 ; IF A KEY IS DOWN, PA7 OF VIA #3 WILL BE GROUNDED, AND THE CURRENT VALUE
02B6- I 5 ; APPLIED TO THE 74154 BE THE KEY NUMBER. WHEN THE PROGRAM DETECTS A KEY CLOSE
02B6- I 6 ; CHECKS FOR KEY CLOSURE FOR 50 MS. TO ELIMINATE BOUNCE.
02B6- I 7 ; NOTE: IF NO KEY IS PRESSED, GETKEY WILL WAIT.
02B6- I 8 ;
02B6-2C 01 CC I 9 ( 4) GETKEY BIT PORT3A ; SEE IF KEY IS STILL DOWN FROM LAST KEY CLOSURE:
02B9- I 10 ; KEYSTROBE IN 'N' STATUS BIT.
02B9-10 FB I 11 (2**) BPL GETKEY ; IF YES, WAIT FOR KEY RELEASE
02BB-A2 0F I 12 ( 2) RSTART LDX #15 ; SET KEY COUNTER TO 15
02BD-8E 00 CC I 13 ( 4) NXTKEY STX PORT3B ; OUTPUT KEY # TO 74154
02C0-2C 01 CC I 14 ( 4) BIT PORT3A ; SEE IF KEY DOWN: STROBE IN 'N'
02C3-10 05 I 15 (2**) BPL BOUNCE ; IF YES, GO DEBOUNCE
02C5-CA I 16 ( 2) DEX ; DECREMENT KEY #
02C6-10 F5 I 17 (2**) BPL NXTKEY ; NO, DO NEXT KEY
02C8-30 F1 I 18 (2**) BMI RSTART ; START OVER
02CA-8A I 19 ( 2) BOUNCE TXA ; SAVE KEY NUMBER IN A
02CB-A0 12 I 20 ( 2) LDY #$12 ; OUTER LOOP CNT LOAD FOR DELAY OF 50 MS.
02CD-A2 FF I 21 ( 2) LP1 LDX #$FF ; INNER 11 US. LOOP
02CF-2C 01 CC I 22 ( 4) LP2 BIT PORT3A ; SEE IF KEY STILL DOWN
02D2-30 E7 I 23 (2**) BMI RSTART ; IF NOT, KEY NOT VALID, RESTART
02D4-CA I 24 ( 2) DEX
02D5-D0 F8 I 25 (2**) BNE LP2 ; THIS LOOP USES 2115*5 US.
02D7-88 I 26 ( 2) DEY
02D8-D0 F3 I 27 (2**) BNE LP1 ; OUTER LOOP: TOTAL IS 50 MS.
02DA-60 I 28 ( 6) RTS ; DONE: KEY IN A.
02DB- I 29 ;
02DB- I 30 ; SUBROUTINE 'INITKEY'
02DB- I 31 ; TAKES CARE OF INITIALIZING VIA #3 FOR USING WITH THE GETKEY ROUTINE FROM
02DB- I 32 ; THE CODE.
02DB- I 33 ;
02DB-A9 00 I 34 ( 2) INITKEY LDA #0
02DD-8D 01 CC I 35 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
02E0-A9 FF I 36 ( 2) LDA #$FF
02E2-8D 02 CC I 37 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
02E5-60 I 38 ( 6) RTS
02B9- 16 .IN ../../common/CH01-Getkey/getkey_routine.asm
02B9- I 1 ; 'GETKEY' KEYBOARD INPUT ROUTINE READS AND DEBOUNCES KEYBOARD. RETURNS WITH
02B9- I 2 ; KEY NUMBER IN ACCUMULATOR IF KEY DOWN. OPERATION: SENDS NUMBERS 0-F TO 74154
02B9- I 3 ; (4 TO 16 LINE DECODER), WHICH GROUNDS ONE SIDE OF KEYSWITCHES ONE AT A TIME.
02B9- I 4 ; IF A KEY IS DOWN, PA7 OF VIA #3 WILL BE GROUNDED, AND THE CURRENT VALUE
02B9- I 5 ; APPLIED TO THE 74154 BE THE KEY NUMBER. WHEN THE PROGRAM DETECTS A KEY CLOSE
02B9- I 6 ; CHECKS FOR KEY CLOSURE FOR 50 MS. TO ELIMINATE BOUNCE.
02B9- I 7 ; NOTE: IF NO KEY IS PRESSED, GETKEY WILL WAIT.
02B9- I 8 ;
02B9-2C 01 CC I 9 ( 4) GETKEY BIT PORT3A ; SEE IF KEY IS STILL DOWN FROM LAST KEY CLOSURE:
02BC- I 10 ; KEYSTROBE IN 'N' STATUS BIT.
02BC-10 FB I 11 (2**) BPL GETKEY ; IF YES, WAIT FOR KEY RELEASE
02BE-A2 0F I 12 ( 2) RSTART LDX #15 ; SET KEY COUNTER TO 15
02C0-8E 00 CC I 13 ( 4) NXTKEY STX PORT3B ; OUTPUT KEY # TO 74154
02C3-2C 01 CC I 14 ( 4) BIT PORT3A ; SEE IF KEY DOWN: STROBE IN 'N'
02C6-10 05 I 15 (2**) BPL BOUNCE ; IF YES, GO DEBOUNCE
02C8-CA I 16 ( 2) DEX ; DECREMENT KEY #
02C9-10 F5 I 17 (2**) BPL NXTKEY ; NO, DO NEXT KEY
02CB-30 F1 I 18 (2**) BMI RSTART ; START OVER
02CD-8A I 19 ( 2) BOUNCE TXA ; SAVE KEY NUMBER IN A
02CE-A0 12 I 20 ( 2) LDY #$12 ; OUTER LOOP CNT LOAD FOR DELAY OF 50 MS.
02D0-A2 FF I 21 ( 2) LP1 LDX #$FF ; INNER 11 US. LOOP
02D2-2C 01 CC I 22 ( 4) LP2 BIT PORT3A ; SEE IF KEY STILL DOWN
02D5-30 E7 I 23 (2**) BMI RSTART ; IF NOT, KEY NOT VALID, RESTART
02D7-CA I 24 ( 2) DEX
02D8-D0 F8 I 25 (2**) BNE LP2 ; THIS LOOP USES 2115*5 US.
02DA-88 I 26 ( 2) DEY
02DB-D0 F3 I 27 (2**) BNE LP1 ; OUTER LOOP: TOTAL IS 50 MS.
02DD-60 I 28 ( 6) RTS ; DONE: KEY IN A.
02DE- I 29 ;
02DE- I 30 ; SUBROUTINE 'INITKEY'
02DE- I 31 ; TAKES CARE OF INITIALIZING VIA #3 FOR USING WITH THE GETKEY ROUTINE FROM
02DE- I 32 ; THE CODE.
02DE- I 33 ;
02DE-A9 00 I 34 ( 2) INITKEY LDA #0
02E0-8D 03 CC I 35 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
02E3-A9 FF I 36 ( 2) LDA #$FF
02E5-8D 02 CC I 37 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
02E8-60 I 38 ( 6) RTS

View File

@ -1,5 +1,5 @@
.CR 6502
.TF magicsquare.hex,hex
.TF magicsquare.hex,INT
.LF magicsquare.list
;
; MAGIC SQUARE GAME FOR THE KIM-1 USING '6502 GAMES' HARDWARE. BOARD SHOULD BE

View File

@ -1,11 +1,12 @@
20A402A9FF8D03C08D02C0AD04C08D01
C0AD04C029018D00C0207F02C900F0EB
C90A10F538E9010AAAAD01C05D6E028D
01C0AD00C05D6F0229018D00C04A90D9
AD01C0C9EFD0D2A90E8500A220A0FFEA
D00088D0FACAD0F5AD01C049FF8D01C0
AD00C049018D00C0C600D0DFF0AB1B00
0736004900BA002401D800C001B0012C
01CC10FBA20F8E00CC2C01CC1005CA10
F530F18AA012A2FF2C01CC30E7CAD0F8
88D0F360A9008D03CCA9FF8D02CC60
:1002000020A402A9FF8D03C08D02C0AD04C08D01E2
:10021000C0AD04C029018D00C0207F02C900F0EBF1
:10022000C90A10F538E9010AAAAD01C05D6E028D58
:1002300001C0AD00C05D6F0229018D00C04A90D998
:10024000AD01C0C9EFD0D2A90E8500A220A0FFEA5F
:10025000D00088D0FACAD0F5AD01C049FF8D01C0E9
:10026000AD00C049018D00C0C600D0DFF0AB1B005F
:100270000736004900BA002401D800C001B0012CA3
:1002800001CC10FBA20F8E00CC2C01CC1005CA10A3
:10029000F530F18AA012A2FF2C01CC30E7CAD0F8C9
:0F02A00088D0F360A9008D03CCA9FF8D02CC603C
:00000001FF

View File

@ -8,7 +8,7 @@ CC00- 10 VIA3 .EQ $CC00
0000- 11
0200- 12 .OR $0200
0200- 13 .TA $0200
0200-20 A4 02 14 ( 6) JSR INITKEY
0200-20 A4 02 14 ( 6) RCONE JSR INITKEY
0203- 15 .IN ../../common/CH05-MagicSquare/game.asm
0203- I 1 ; 'MAGIC SQUARE'
0203- I 2 ; KEYS 1-9 ON THE HEX KEYBOARD ARE EACH ASSOCIATED WITH ON LED IN THE 3X3

View File

@ -1,5 +1,5 @@
.CR 6502
.TF getkey.hex,hex
.TF getkey.hex,INT
.LF getkey.list
;
; FROM THE BOOK '6502 GAMES', EXPECTS THE SAME HARDWARE AS DECRIBED WITHIN IT.

View File

@ -1,4 +1,5 @@
A9008D03CCA9FF8D02CC2C01CC10FBA2
0F8E00CC2C01CC1005CA10F530F18AA0
12A2FF2C01CC30E7CAD0F888D0F360A9
008D03CCA9FF8D02CC60
:10010000A9008D03CCA9FF8D02CC2C01CC10FBA241
:100110000F8E00CC2C01CC1005CA10F530F18AA04E
:1001200012A2FF2C01CC30E7CAD0F888D0F360A926
:0A013000008D03CCA9FF8D02CC6006
:00000001FF

View File

@ -49,8 +49,9 @@ CC00- 14 PORT3B .EQ VIA3 ; CAN BE JUMPERED IF
012F- I 30 ; SUBROUTINE 'INITKEY'
012F- I 31 ; TAKES CARE OF INITIALIZING VIA #3 FOR USING WITH THE GETKEY ROUTINE FROM
012F- I 32 ; THE CODE.
012F-A9 00 I 33 ( 2) INITKEY LDA #0
0131-8D 03 CC I 34 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
0134-A9 FF I 35 ( 2) LDA #$FF
0136-8D 02 CC I 36 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
0139-60 I 37 ( 6) RTS
012F- I 33 ;
012F-A9 00 I 34 ( 2) INITKEY LDA #0
0131-8D 03 CC I 35 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
0134-A9 FF I 36 ( 2) LDA #$FF
0136-8D 02 CC I 37 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
0139-60 I 38 ( 6) RTS

View File

@ -1,5 +1,5 @@
.CR 6502
.TF music.hex,hex
.TF music.hex,INT
.LF music.list
;
; MUSIC PLAYER USING '6502 GAMES' HARDWARE. BOARD SHOULD BE JUMPERED WITH VIA

View File

@ -1,18 +1,19 @@
200603A90085001820E102C90FD00520
8A0290EFC90ED006204B021890EA8501
207302A500C9FFD005208A0290DA4AA8
A501B009290F990003E60090CB0A0A0A
0A190003990003E60090BDA2008602A5
024AAABD0003B004290F900629F04A4A
4A4A207302A220209F02E602A502C500
90DF60C90DD006A254209F0260AABDD4
028504BDC70220AB0260A9FF8504A94B
20AB02A93820AB02A94B20AB021860A0
FFEAD00088D0FACAD0F5608503A9FF8D
02CCA900A604A40388189000D0FA49FF
8D00CCCAD0F060FEE2C9BEA9968E867E
7770645E55606B72808F94A1AAB5BFD7
E42C01CC10FBA20F8E00CC2C01CC1005
CA10F530F18AA012A2FF2C01CC30E7CA
D0F888D0F360A9008D03CCA9FF8D02CC
60
:10020000200603A90085001820E102C90FD00520AF
:100210008A0290EFC90ED006204B021890EA8501A1
:10022000207302A500C9FFD005208A0290DA4AA8EF
:10023000A501B009290F990003E60090CB0A0A0A2C
:100240000A190003990003E60090BDA2008602A5EA
:10025000024AAABD0003B004290F900629F04A4AB9
:100260004A4A207302A220209F02E602A502C5008E
:1002700090DF60C90DD006A254209F0260AABDD4B1
:10028000028504BDC70220AB0260A9FF8504A94B0B
:1002900020AB02A93820AB02A94B20AB021860A00A
:1002A000FFEAD00088D0FACAD0F5608503A9FF8D97
:1002B00002CCA900A604A40388189000D0FA49FF34
:1002C0008D00CCCAD0F060FEE2C9BEA9968E867EB3
:1002D0007770645E55606B72808F94A1AAB5BFD7AA
:1002E000E42C01CC10FBA20F8E00CC2C01CC10050D
:1002F000CA10F530F18AA012A2FF2C01CC30E7CA57
:10030000D0F888D0F360A9008D03CCA9FF8D02CC72
:01031000608C
:00000001FF

View File

@ -31,153 +31,157 @@ CC00- 15 PORT3B .EQ VIA3 ; CAN BE JUMPERED IF
0300- I 14 TABEG .EQ $0300 ; TABLE TO STORE MUSIC
CC00- I 15 PORT3B .EQ VIA3 ; VIA OUTPUT PORT B
CC02- I 16 DDR3B .EQ VIA3+2 ; VIA PORT B DIRECTION REGISTER
0203- I 17 ;
0203- I 18 ; COMMAND LINE INTERPRETER
0203- I 19 ; $F AS INPUT MEANS RESET POINTERS, START OVER.
0203- I 20 ; $E MEANS PLAY CURRENTLY STORED NOTES
0203- I 21 ; ANYTHING ELSE IS STORED FOR REPLAY.
0203- I 22 ;
0203-A9 00 I 23 ( 2) START LDA #0 ; CLEAR NOTE LIST LENGTH
0205-85 00 I 24 ( 2) STA PILEN
0207-18 I 25 ( 2) CLC ; CLEAR NIBBLE MARKER
0208-20 E1 02 I 26 ( 6) NXKEY JSR GETKEY
020B-C9 0F I 27 ( 2) CMP #15 ; IS KEY #15?
020D-D0 05 I 28 (2**) BNE NXTST ; NO, DO NEXT TEST
020F-20 8A 02 I 29 ( 6) JSR BEEP3 ; TELL USER OF CLEARING
0212-90 EF I 30 (2**) BCC START ; CLEAR POINTERS AND START OVER
0214-C9 0E I 31 ( 2) NXTST CMP #14 ; IS KEY #14?
0216-D0 06 I 32 (2**) BNE NUMKEY ; NO, KEY IS NOTE NUMBER
0218-20 4B 02 I 33 ( 6) JSR PLAYEM ; PLAY NOTES
021B-18 I 34 ( 2) CLC
021C-90 EA I 35 (2**) BCC NXKEY ; GET NEXT COMMAND
021E- I 36 ;
021E- I 37 ; ROUTINE TO LOAD NOT LIST WITH NOTES
021E- I 38 ;
021E-85 01 I 39 ( 2) NUMKEY STA TEMP ; SAVE KEY, FREE A
0220-20 73 02 I 40 ( 6) JSR PLAYIT ; PLAY NOTE
0223-A5 00 I 41 ( 3) LDA PILEN ; GET LIST LENGTH
0225-C9 FF I 42 ( 2) CMP #$FF ; OVERFLOW?
0227-D0 05 I 43 (2**) BNE OK ; NO, ADD NOTE TO LIST
0229-20 8A 02 I 44 ( 6) JSR BEEP3 ; YES, WARN USER
022C-90 DA I 45 (2**) BCC NXKEY ; RETURN TO INPUT MODE
022E-4A I 46 ( 2) OK LSR A ; SHIFT LOW BIT INTO NIBBLE POINTER
022F-A8 I 47 ( 2) TAY ; USE SHIFTED NIBBLE POINTER AS BYTE INDEX
0230-A5 01 I 48 ( 3) LDA TEMP ; RESTORE KEY#
0232-B0 09 I 49 (2**) BCS FINBYT ; IF BYTE ALREADY HAS A NIBBLE, FINISH IT AND STORE
0234-29 0F I 50 ( 2) AND #%00001111 ; 1ST NIBBLE. MASK HIGH NIBBLE
0236-99 00 03 I 51 ( 5) STA TABEG,Y ; SAVE UNFINISHED 1/2 BYTE
0239-E6 00 I 52 ( 5) INC PILEN ; POINT TO NEXT NIBBLE
023B-90 CB I 53 (2**) BCC NXKEY ; GET NEXT KEYSTROKE
023D-0A I 54 ( 2) FINBYT ASL A ; SHIFT NIBBLE 2 TO HIGH ORDER
023E-0A I 55 ( 2) ASL A
023F-0A I 56 ( 2) ASL A
0240-0A I 57 ( 2) ASL A
0241-19 00 03 I 58 ( 4*) ORA TABEG,Y ; JOIN 2 NIBBLES AS BYTE
0244-99 00 03 I 59 ( 5) STA TABEG,Y ; ... AND STORE.
0247-E6 00 I 60 ( 5) INC PILEN ; POINT TO NEXT NIBBLE IN NEXT BYTE
0249-90 BD I 61 (2**) BCC NXKEY ; RETURN
024B- I 62 ;
024B- I 63 ; ROUTINE TO PLAY NOTES
024B- I 64 ;
024B-A2 00 I 65 ( 2) PLAYEM LDX #0 ; CLEAR POINTER
024D-86 02 I 66 ( 3) STX PTR
024F-A5 02 I 67 ( 3) LDA PTR ; LOAD ACCUMULATOR WITH CURRENT POINTER VALUE
0251-4A I 68 ( 2) LOOP LSR A ; SHIFT NIBBLE INDICATOR INTO CARRY
0252-AA I 69 ( 2) TAX ; USE SHIFTED NIBBLE POINTER AS BYTE POINTER
0253-BD 00 03 I 70 ( 4*) LDA TABEG,X ; LOAD NOTE TO PLAY
0256-B0 04 I 71 (2**) BCS ENDBYT ; LOW NIBBLE USED, GET HIGH
0258-29 0F I 72 ( 2) AND #%00001111 ; MASK OUT HIGH BITS
025A-90 06 I 73 (2**) BCC FINISH ; PLAY NOTE
025C-29 F0 I 74 ( 2) ENDBYT AND #%11110000 ; THROW AWAY LOW NIBBLE
025E-4A I 75 ( 2) LSR A ; SHIFT INTO LOW
025F-4A I 76 ( 2) LSR A
0260-4A I 77 ( 2) LSR A
0261-4A I 78 ( 2) LSR A
0262-20 73 02 I 79 ( 6) FINISH JSR PLAYIT ; CALCULATE CONSTANTS & PLAY
0265-A2 20 I 80 ( 2) LDX #$20 ; BETWEEN-NOTE DELAY
0267-20 9F 02 I 81 ( 6) JSR DELAY
026A-E6 02 I 82 ( 5) INC PTR ; ONE NIBBLE USED
026C-A5 02 I 83 ( 3) LDA PTR
026E-C5 00 I 84 ( 3) CMP PILEN ; END OF LIST?
0270-90 DF I 85 (2**) BCC LOOP ; NO, GET NEXT NOTE
0272-60 I 86 ( 6) RTS ; DONE
0273- I 87 ;
0273- I 88 ; ROUTINE TO DO TABLE LOOK UP, SEPARATE REST
0273- I 89 ;
0273-C9 0D I 90 ( 2) PLAYIT CMP #13 ; REST?
0275-D0 06 I 91 (2**) BNE SOUND ; NO.
0277-A2 54 I 92 ( 2) LDX #$54 ; DELAY = NOTE LENGTH = .21SEC
0279-20 9F 02 I 93 ( 6) JSR DELAY
027C-60 I 94 ( 6) RTS
027D-AA I 95 ( 2) SOUND TAX ; USE KEYS AS INDEX..
027E-BD D4 02 I 96 ( 4*) LDA DURTAB,X ; ... TO FIND DURATION.
0281-85 04 I 97 ( 2) STA DUR ; STORE DURATION FOR USE
0283-BD C7 02 I 98 ( 4*) LDA NOTAB,X ; LOAD NOTE VALUE
0286-20 AB 02 I 99 ( 6) JSR TONE
0289-60 I 100 ( 6) RTS
028A- I 101 ;
028A- I 102 ; ROUTINE TO MAKE 3 TONE SIGNAL
028A- I 103 ;
028A-A9 FF I 104 ( 2) BEEP3 LDA #$FF ; DURATION FOR BEEPS
028C-85 04 I 105 ( 2) STA DUR
028E-A9 4B I 106 ( 2) LDA #$4B ; CODE FOR E2
0290-20 AB 02 I 107 ( 6) JSR TONE ; 1ST NOTE
0293-A9 38 I 108 ( 2) LDA #$38 ; CODE FOR D2
0295-20 AB 02 I 109 ( 6) JSR TONE
0298-A9 4B I 110 ( 2) LDA #$4B
029A-20 AB 02 I 111 ( 6) JSR TONE
029D-18 I 112 ( 2) CLC
029E-60 I 113 ( 6) RTS
029F- I 114 ;
029F- I 115 ; VARIABLE-LENGTH DELAY
029F- I 116 ;
029F-A0 FF I 117 ( 2) DELAY LDY #$FF
02A1-EA I 118 ( 2) DLY NOP
02A2-D0 00 I 119 (2**) BNE DL0 ; (.+2 IN BOOK)
02A4-88 I 120 ( 2) DL0 DEY
02A5-D0 FA I 121 (2**) BNE DLY ; 10 US. LOOP
02A7-CA I 122 ( 2) DEX
02A8-D0 F5 I 123 (2**) BNE DELAY ; LOOP TIME = 2556*[X]
02AA-60 I 124 ( 6) RTS
02AB- I 125 ;
02AB- I 126 ; ROUTINE TO MAKE TONE: # OF 1/2 CYCLES IS IN 'DUR', AND 1/2 CYCLE TIME IS IN
02AB- I 127 ; ACCUMULATOR. LOOP TIME = 20*[A]+26 US SINCE TWO RUNS THROUGH THE OUTER LOOP
02AB- I 128 ; MAKES ONE CYCLE OF THE TONE.
CC03- I 17 DDR3A .EQ VIA3+3
CC01- I 18 PORT3A .EQ VIA3+1
CC00- I 19 PORT3B .EQ VIA3
0203- I 20
0203- I 21 ;
0203- I 22 ; COMMAND LINE INTERPRETER
0203- I 23 ; $F AS INPUT MEANS RESET POINTERS, START OVER.
0203- I 24 ; $E MEANS PLAY CURRENTLY STORED NOTES
0203- I 25 ; ANYTHING ELSE IS STORED FOR REPLAY.
0203- I 26 ;
0203-A9 00 I 27 ( 2) START LDA #0 ; CLEAR NOTE LIST LENGTH
0205-85 00 I 28 ( 2) STA PILEN
0207-18 I 29 ( 2) CLC ; CLEAR NIBBLE MARKER
0208-20 E1 02 I 30 ( 6) NXKEY JSR GETKEY
020B-C9 0F I 31 ( 2) CMP #15 ; IS KEY #15?
020D-D0 05 I 32 (2**) BNE NXTST ; NO, DO NEXT TEST
020F-20 8A 02 I 33 ( 6) JSR BEEP3 ; TELL USER OF CLEARING
0212-90 EF I 34 (2**) BCC START ; CLEAR POINTERS AND START OVER
0214-C9 0E I 35 ( 2) NXTST CMP #14 ; IS KEY #14?
0216-D0 06 I 36 (2**) BNE NUMKEY ; NO, KEY IS NOTE NUMBER
0218-20 4B 02 I 37 ( 6) JSR PLAYEM ; PLAY NOTES
021B-18 I 38 ( 2) CLC
021C-90 EA I 39 (2**) BCC NXKEY ; GET NEXT COMMAND
021E- I 40 ;
021E- I 41 ; ROUTINE TO LOAD NOT LIST WITH NOTES
021E- I 42 ;
021E-85 01 I 43 ( 2) NUMKEY STA TEMP ; SAVE KEY, FREE A
0220-20 73 02 I 44 ( 6) JSR PLAYIT ; PLAY NOTE
0223-A5 00 I 45 ( 3) LDA PILEN ; GET LIST LENGTH
0225-C9 FF I 46 ( 2) CMP #$FF ; OVERFLOW?
0227-D0 05 I 47 (2**) BNE OK ; NO, ADD NOTE TO LIST
0229-20 8A 02 I 48 ( 6) JSR BEEP3 ; YES, WARN USER
022C-90 DA I 49 (2**) BCC NXKEY ; RETURN TO INPUT MODE
022E-4A I 50 ( 2) OK LSR A ; SHIFT LOW BIT INTO NIBBLE POINTER
022F-A8 I 51 ( 2) TAY ; USE SHIFTED NIBBLE POINTER AS BYTE INDEX
0230-A5 01 I 52 ( 3) LDA TEMP ; RESTORE KEY#
0232-B0 09 I 53 (2**) BCS FINBYT ; IF BYTE ALREADY HAS A NIBBLE, FINISH IT AND STORE
0234-29 0F I 54 ( 2) AND #%00001111 ; 1ST NIBBLE. MASK HIGH NIBBLE
0236-99 00 03 I 55 ( 5) STA TABEG,Y ; SAVE UNFINISHED 1/2 BYTE
0239-E6 00 I 56 ( 5) INC PILEN ; POINT TO NEXT NIBBLE
023B-90 CB I 57 (2**) BCC NXKEY ; GET NEXT KEYSTROKE
023D-0A I 58 ( 2) FINBYT ASL A ; SHIFT NIBBLE 2 TO HIGH ORDER
023E-0A I 59 ( 2) ASL A
023F-0A I 60 ( 2) ASL A
0240-0A I 61 ( 2) ASL A
0241-19 00 03 I 62 ( 4*) ORA TABEG,Y ; JOIN 2 NIBBLES AS BYTE
0244-99 00 03 I 63 ( 5) STA TABEG,Y ; ... AND STORE.
0247-E6 00 I 64 ( 5) INC PILEN ; POINT TO NEXT NIBBLE IN NEXT BYTE
0249-90 BD I 65 (2**) BCC NXKEY ; RETURN
024B- I 66 ;
024B- I 67 ; ROUTINE TO PLAY NOTES
024B- I 68 ;
024B-A2 00 I 69 ( 2) PLAYEM LDX #0 ; CLEAR POINTER
024D-86 02 I 70 ( 3) STX PTR
024F-A5 02 I 71 ( 3) LDA PTR ; LOAD ACCUMULATOR WITH CURRENT POINTER VALUE
0251-4A I 72 ( 2) LOOP LSR A ; SHIFT NIBBLE INDICATOR INTO CARRY
0252-AA I 73 ( 2) TAX ; USE SHIFTED NIBBLE POINTER AS BYTE POINTER
0253-BD 00 03 I 74 ( 4*) LDA TABEG,X ; LOAD NOTE TO PLAY
0256-B0 04 I 75 (2**) BCS ENDBYT ; LOW NIBBLE USED, GET HIGH
0258-29 0F I 76 ( 2) AND #%00001111 ; MASK OUT HIGH BITS
025A-90 06 I 77 (2**) BCC FINISH ; PLAY NOTE
025C-29 F0 I 78 ( 2) ENDBYT AND #%11110000 ; THROW AWAY LOW NIBBLE
025E-4A I 79 ( 2) LSR A ; SHIFT INTO LOW
025F-4A I 80 ( 2) LSR A
0260-4A I 81 ( 2) LSR A
0261-4A I 82 ( 2) LSR A
0262-20 73 02 I 83 ( 6) FINISH JSR PLAYIT ; CALCULATE CONSTANTS & PLAY
0265-A2 20 I 84 ( 2) LDX #$20 ; BETWEEN-NOTE DELAY
0267-20 9F 02 I 85 ( 6) JSR DELAY
026A-E6 02 I 86 ( 5) INC PTR ; ONE NIBBLE USED
026C-A5 02 I 87 ( 3) LDA PTR
026E-C5 00 I 88 ( 3) CMP PILEN ; END OF LIST?
0270-90 DF I 89 (2**) BCC LOOP ; NO, GET NEXT NOTE
0272-60 I 90 ( 6) RTS ; DONE
0273- I 91 ;
0273- I 92 ; ROUTINE TO DO TABLE LOOK UP, SEPARATE REST
0273- I 93 ;
0273-C9 0D I 94 ( 2) PLAYIT CMP #13 ; REST?
0275-D0 06 I 95 (2**) BNE SOUND ; NO.
0277-A2 54 I 96 ( 2) LDX #$54 ; DELAY = NOTE LENGTH = .21SEC
0279-20 9F 02 I 97 ( 6) JSR DELAY
027C-60 I 98 ( 6) RTS
027D-AA I 99 ( 2) SOUND TAX ; USE KEYS AS INDEX..
027E-BD D4 02 I 100 ( 4*) LDA DURTAB,X ; ... TO FIND DURATION.
0281-85 04 I 101 ( 2) STA DUR ; STORE DURATION FOR USE
0283-BD C7 02 I 102 ( 4*) LDA NOTAB,X ; LOAD NOTE VALUE
0286-20 AB 02 I 103 ( 6) JSR TONE
0289-60 I 104 ( 6) RTS
028A- I 105 ;
028A- I 106 ; ROUTINE TO MAKE 3 TONE SIGNAL
028A- I 107 ;
028A-A9 FF I 108 ( 2) BEEP3 LDA #$FF ; DURATION FOR BEEPS
028C-85 04 I 109 ( 2) STA DUR
028E-A9 4B I 110 ( 2) LDA #$4B ; CODE FOR E2
0290-20 AB 02 I 111 ( 6) JSR TONE ; 1ST NOTE
0293-A9 38 I 112 ( 2) LDA #$38 ; CODE FOR D2
0295-20 AB 02 I 113 ( 6) JSR TONE
0298-A9 4B I 114 ( 2) LDA #$4B
029A-20 AB 02 I 115 ( 6) JSR TONE
029D-18 I 116 ( 2) CLC
029E-60 I 117 ( 6) RTS
029F- I 118 ;
029F- I 119 ; VARIABLE-LENGTH DELAY
029F- I 120 ;
029F-A0 FF I 121 ( 2) DELAY LDY #$FF
02A1-EA I 122 ( 2) DLY NOP
02A2-D0 00 I 123 (2**) BNE DL0 ; (.+2 IN BOOK)
02A4-88 I 124 ( 2) DL0 DEY
02A5-D0 FA I 125 (2**) BNE DLY ; 10 US. LOOP
02A7-CA I 126 ( 2) DEX
02A8-D0 F5 I 127 (2**) BNE DELAY ; LOOP TIME = 2556*[X]
02AA-60 I 128 ( 6) RTS
02AB- I 129 ;
02AB-85 03 I 130 ( 2) TONE STA FREQ ; FREQ IS TEMP FOR # OF CYCLES
02AD-A9 FF I 131 ( 2) LDA #$FF ; SET UP DATA DIRECTION REGISTER
02AF-8D 02 CC I 132 ( 4) STA DDR3B
02B2-A9 00 I 133 ( 2) LDA #$00 ; A IS SENT TO PORT, START HI
02B4-A6 04 I 134 ( 3) LDX DUR
02B6-A4 03 I 135 ( 3) FL2 LDY FREQ
02B8-88 I 136 ( 2) FL1 DEY
02B9-18 I 137 ( 2) CLC
02BA-90 00 I 138 (2**) BCC FL0 ; (.+2 IN BOOK)
02BC-D0 FA I 139 (2**) FL0 BNE FL1 ; INNER, 10 US LOOP.
02BE-49 FF I 140 ( 2) EOR #$FF ; COMPLEMENT I/O PORT
02C0-8D 00 CC I 141 ( 4) STA PORT3B ; ... AND SET IT
02C3-CA I 142 ( 2) DEX
02C4-D0 F0 I 143 (2**) BNE FL2 ; OUTER LOOP
02C6-60 I 144 ( 6) RTS
02C7- I 145 ;
02C7- I 146 ; TABLE OF NOTE CONSTANTS
02C7- I 147 ; CONTAINS:
02C7- I 148 ; [OCTAVE BELOW MIDDLE C] : G,A,BCC
02C7- I 149 ; [OCTAVE OF MIDDLE C] : C,D,E,F,F#,G,G#,A,B
02C7- I 150 ; [OCTAVE ABOVE MIDDLE C] : C
02C7- I 151 ;
02AB- I 130 ; ROUTINE TO MAKE TONE: # OF 1/2 CYCLES IS IN 'DUR', AND 1/2 CYCLE TIME IS IN
02AB- I 131 ; ACCUMULATOR. LOOP TIME = 20*[A]+26 US SINCE TWO RUNS THROUGH THE OUTER LOOP
02AB- I 132 ; MAKES ONE CYCLE OF THE TONE.
02AB- I 133 ;
02AB-85 03 I 134 ( 2) TONE STA FREQ ; FREQ IS TEMP FOR # OF CYCLES
02AD-A9 FF I 135 ( 2) LDA #$FF ; SET UP DATA DIRECTION REGISTER
02AF-8D 02 CC I 136 ( 4) STA DDR3B
02B2-A9 00 I 137 ( 2) LDA #$00 ; A IS SENT TO PORT, START HI
02B4-A6 04 I 138 ( 3) LDX DUR
02B6-A4 03 I 139 ( 3) FL2 LDY FREQ
02B8-88 I 140 ( 2) FL1 DEY
02B9-18 I 141 ( 2) CLC
02BA-90 00 I 142 (2**) BCC FL0 ; (.+2 IN BOOK)
02BC-D0 FA I 143 (2**) FL0 BNE FL1 ; INNER, 10 US LOOP.
02BE-49 FF I 144 ( 2) EOR #$FF ; COMPLEMENT I/O PORT
02C0-8D 00 CC I 145 ( 4) STA PORT3B ; ... AND SET IT
02C3-CA I 146 ( 2) DEX
02C4-D0 F0 I 147 (2**) BNE FL2 ; OUTER LOOP
02C6-60 I 148 ( 6) RTS
02C7- I 149 ;
02C7- I 150 ; TABLE OF NOTE CONSTANTS
02C7- I 151 ; CONTAINS:
02C7- I 152 ; [OCTAVE BELOW MIDDLE C] : G,A,BCC
02C7- I 153 ; [OCTAVE OF MIDDLE C] : C,D,E,F,F#,G,G#,A,B
02C7- I 154 ; [OCTAVE ABOVE MIDDLE C] : C
02C7- I 155 ;
02C7-FE E2 C9 BE
A9 96 8E 86
7E 77 70 64
5E I 152 NOTAB .HS FE.E2.C9.BE.A9.96.8E.86.7E.77.70.64.5E
02D4- I 153 ;
02D4- I 154 ; TABLE OF NOTE DURATIONS IN # OF 1/2 CYCLES SET FOR A NOTE LENGTH OF
02D4- I 155 ; ABOUT .21 SEC.
02D4- I 156 ;
5E I 156 NOTAB .HS FE.E2.C9.BE.A9.96.8E.86.7E.77.70.64.5E
02D4- I 157 ;
02D4- I 158 ; TABLE OF NOTE DURATIONS IN # OF 1/2 CYCLES SET FOR A NOTE LENGTH OF
02D4- I 159 ; ABOUT .21 SEC.
02D4- I 160 ;
02D4-55 60 6B 72
80 8F 94 A1
AA B5 BF D7
E4 I 157 DURTAB .HS 55.60.6B.72.80.8F.94.A1.AA.B5.BF.D7.E4
E4 I 161 DURTAB .HS 55.60.6B.72.80.8F.94.A1.AA.B5.BF.D7.E4
02E1- 21 .IN ../CH01-Getkey/getkey_routine.asm
02E1- I 1 ; 'GETKEY' KEYBOARD INPUT ROUTINE READS AND DEBOUNCES KEYBOARD. RETURNS WITH
02E1- I 2 ; KEY NUMBER IN ACCUMULATOR IF KEY DOWN. OPERATION: SENDS NUMBERS 0-F TO 74154
@ -211,8 +215,9 @@ CC02- I 16 DDR3B .EQ VIA3+2 ; VIA PORT B DIRECTIO
0306- I 30 ; SUBROUTINE 'INITKEY'
0306- I 31 ; TAKES CARE OF INITIALIZING VIA #3 FOR USING WITH THE GETKEY ROUTINE FROM
0306- I 32 ; THE CODE.
0306-A9 00 I 33 ( 2) INITKEY LDA #0
0308-8D 03 CC I 34 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
030B-A9 FF I 35 ( 2) LDA #$FF
030D-8D 02 CC I 36 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
0310-60 I 37 ( 6) RTS
0306- I 33 ;
0306-A9 00 I 34 ( 2) INITKEY LDA #0
0308-8D 03 CC I 35 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
030B-A9 FF I 36 ( 2) LDA #$FF
030D-8D 02 CC I 37 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
0310-60 I 38 ( 6) RTS

View File

@ -1,5 +1,5 @@
.CR 6502
.TF translate.hex,hex
.TF translate.hex,INT
.LF translate.list
;
; BINARY TRANSLATION GAME FOR '6502 GAMES' HARDWARE. BOARD SHOULD BE JUMPERED

View File

@ -1,18 +1,19 @@
A9FF8D03C08D02C08D02CCA9008D03CC
85058506A9798D01C0A9008D00C08502
8501208C02A5028504A5018503A93C8D
01C0A9018D00C0A90085028501208C02
A501C503F0049027B008A502C504901F
B000A9F08D00C0A9008D01C0A94020E4
02E605A90AC505D0ABA9F020CC0260A9
0E8D00C0A9008D01C0A94020E402E606
A90AC506D08EA90E20CC026020F50220
E40220F502290F8507AABD08030D00C0
8D00C020B602C407F00BA9012D00C08D
00C04C8C0260A00F8C00CC2C01CC100B
8810F5E602D0EFE601D0EB60A2148601
8502A5024D00C08D00C0A90A20E402C6
01D0EF608500A010A2FFCAD0FD88D0F8
C600D0F26038A509650C650D8508A204
B5089509CA10F960028222A2129232B2
0A8A2AAA1A9A3ABA
:10020000A9FF8D03C08D02C08D02CCA9008D03CC47
:1002100085058506A9798D01C0A9008D00C08502DC
:100220008501208C02A5028504A5018503A93C8DCA
:1002300001C0A9018D00C0A90085028501208C02A2
:10024000A501C503F0049027B008A502C504901FBE
:10025000B000A9F08D00C0A9008D01C0A94020E424
:1002600002E605A90AC505D0ABA9F020CC0260A919
:100270000E8D00C0A9008D01C0A94020E402E60651
:10028000A90AC506D08EA90E20CC026020F5022056
:10029000E40220F502290F8507AABD08030D00C05E
:1002A0008D00C020B602C407F00BA9012D00C08D3F
:1002B00000C04C8C0260A00F8C00CC2C01CC100B29
:1002C0008810F5E602D0EFE601D0EB60A2148601BB
:1002D0008502A5024D00C08D00C0A90A20E402C617
:1002E00001D0EF608500A010A2FFCAD0FD88D0F831
:1002F000C600D0F26038A509650C650D8508A2041A
:10030000B5089509CA10F960028222A2129232B28F
:080310000A8A2AAA1A9A3ABAD5
:00000001FF

View File

@ -1,5 +1,5 @@
.CR 6502
.TF hexguess.hex,hex
.TF hexguess.hex,INT
.LF hexguess.list
;
; HEX GUESSING GAME USING '6502 GAMES' HARDWARE. BOARD SHOULD BE JUMPERED WITH

View File

@ -1,15 +1,16 @@
20DE02A9FF8D03C08D02C08D02CC8502
A90A8501A9008D01C08D00C0AD04C085
04A92020990220B9020A0A0A0A850020
B902290F05008500A50438E500B00549
FF386900A200DDB002B027E8E009D0F6
A90B8500A9FF8D01C08D00C0A9322099
02A9FF4D01C08D01C08D00C0C600D0EC
F09EE8A9008D00C02091028D01C09005
A9018D00C0C601D098A9BE2099024C10
02A900382ACAD0FB608503A900A602A4
0388189000D0FA49FF8D00CCCAD0F060
C880402010080402012C01CC10FBA20F
8E00CC2C01CC1005CA10F530F18AA012
A2FF2C01CC30E7CAD0F888D0F360A900
8D03CCA9FF8D02CC60
:1002000020DE02A9FF8D03C08D02C08D02CC8502C5
:10021000A90A8501A9008D01C08D00C0AD04C0856B
:1002200004A92020990220B9020A0A0A0A8500209E
:10023000B902290F05008500A50438E500B005497D
:10024000FF386900A200DDB002B027E8E009D0F66F
:10025000A90B8500A9FF8D01C08D00C0A93220998E
:1002600002A9FF4D01C08D01C08D00C0C600D0ECB9
:10027000F09EE8A9008D00C02091028D01C090057C
:10028000A9018D00C0C601D098A9BE2099024C10CA
:1002900002A900382ACAD0FB608503A900A602A4DF
:1002A0000388189000D0FA49FF8D00CCCAD0F060C6
:1002B000C880402010080402012C01CC10FBA20FC2
:1002C0008E00CC2C01CC1005CA10F530F18AA0129A
:1002D000A2FF2C01CC30E7CAD0F888D0F360A90087
:0902E0008D03CCA9FF8D02CC6056
:00000001FF

View File

@ -1,5 +1,5 @@
.CR 6502
.TF magicsquare.hex,hex
.TF magicsquare.hex,INT
.LF magicsquare.list
;
; HEX GUESSING GAME USING '6502 GAMES' HARDWARE. BOARD SHOULD BE JUMPERED WITH