This page (revision-8) was last changed on 03-Feb-2023 15:21 by Roland B. Wassenberg 

This page was created on 06-Sep-2017 23:41 by Roland B. Wassenberg

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
8 03-Feb-2023 15:21 28 KB Roland B. Wassenberg to previous
7 07-Sep-2017 00:31 28 KB Roland B. Wassenberg to previous | to last
6 07-Sep-2017 00:25 11 KB Roland B. Wassenberg to previous | to last
5 07-Sep-2017 00:18 11 KB Roland B. Wassenberg to previous | to last
4 06-Sep-2017 23:46 11 KB Roland B. Wassenberg to previous | to last
3 06-Sep-2017 23:46 11 KB Roland B. Wassenberg to previous | to last
2 06-Sep-2017 23:43 11 KB Roland B. Wassenberg to previous | to last
1 06-Sep-2017 23:41 11 KB Roland B. Wassenberg to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 2 added 10 lines
!!ATR image
* [Checkers_Source_Code_Atari_Assembler-Editor_with_DOS_2.0S_SD.atr] ; to be used with the [Atari Assembler Editor|Atari Assembler Editor] cartridge by Kathleen Ann O'Brien
* [Checkers_Source_Code_Atari_Assembler-Editor_with_DOS_2.75_SD.atr] ; to be used with the [Atari Assembler Editor|Atari Assembler Editor] cartridge by Kathleen Ann O'Brien
!!TXT Files
* [Checkers Source Code.txt] ; Checkers Display source code in a text file
* [Checkers assembliert-0 Fehler.txt] ; Checkers Display assembled with 0 errors in a text file
!!Source Code
At line 3 changed one line
10 TITLE "ATARI 800 CHECKERS DISPLAY BY C. SHAW 3/31/80"
10 .TITLE "ATARI 800 CHECKERS DISPLAY BY C. SHAW 3/31/80"
At line 14 removed one line
0120 ;THIS IS A RAM BASED PROGRAM WHICH RUNS WITH THE ASSEMBLER CARTRIDGE, NOT A
At line 49 changed one line
0470 PAGE
0470 .PAGE
At line 87 changed one line
0850 PAGE
0850 .PAGE
At line 109 changed one line
1070 PAGE
1070 .PAGE
At line 120 changed one line
1180 PAGE
1180 .PAGE
At line 171 changed one line
1690 PAGE
1690 .PAGE
At line 362 added 456 lines
!!Assembled Source Code with 0 errors
{{{
0000 10 .TITLE "ATARI 800 CHECKERS DISPLAY BY C. SHAW 3/31/80"
20 ;
30 ;COPYRIGHT ATARI 1980
40 ;
50 ;THIS IS AN EXAMPLE OF A DISPLAY LIST WHICH USES CHARACTER MAPPING TO
60 ;PRODUCE THE CHECKERS AND THE TOP AND BOTTOM BORDERS OF THE BOARD.
70 ;PLAYERS ARE USED FOR THE RED SQUARES. THIS GIVES 6 COLORS WITHOUT
80 ;CHANGING THE COLOR REGISTERS.
90 ;MISSILES ARE USED FOR THE LEFT AND RIGHT BORDERS.
0100 ;THE PROGRAM STARTS AT THE LOCATION SPECIFIED BY PMB.
0110 ;A FEW TRICKS ARE USED TO SAVE RAM, BUT FURTHER OPTIMIZATION IS POSSIBLE
0120 ;ROM CARTRIDGE.
0140 ;
0150 ;COLLEEN (ATARI 800) EQUATES
0160 ;
D409 0170 CHBASE = $D409
D400 0180 DMACTL = $D400
022F 0190 SDMCTL = $022F
D000 0200 HPOSP0 = $D000
D008 0210 SIZEP0 = $D008
02C0 0220 PCOLR0 = $02C0
0230 0230 SDLSTL = $0230
0231 0240 SDLSTH = $0231
D01D 0250 GRACTL = $D01D
D407 0260 PMBASE = $D407
026F 0270 GPRIOR = $026F
0200 0280 VDSLST = $0200
D40E 0290 NMIEN = $D40E
0300 ;
0310 ;DISPLAY LIST EQUATES
0320 ;
0080 0330 INT = $80 ;DISPLAY LIST INTERRUPT (BIT 7 OF NMI STATUS)
0041 0340 JMPWT = $41 ;JUMP AND WAIT UNTIL END OF NEXT VERTICAL BLANK (2 BYTES)
0040 0350 RELOAD = $40 ;RELOAD MEM SCAN COUNTER (2 BYTES)
0020 0360 VSC = $20 ;VERTICAL SCROLL ENABLE
0010 0370 HSC = $10 ;HORIZONTAL SCROLL ENABLE
0001 0380 JUMP = 1 ;JUMP INSTRUCTION (2 BYTES)
0000 0390 BLANK1 = 0 ;1 BLANK TV LINE
0010 0400 BLANK2 = $10 ;2 BLANK LINES
0020 0410 BLANK3 = $20 ;3
0030 0420 BLANK4 = $30 ;4
0040 0430 BLANK5 = $40 ;5
0050 0440 BLANK6 = $50 ;6
0060 0450 BLANK7 = $60 ;7
0070 0460 BLANK8 = $70 ;8 BLANK TV LINES
ATARI 800 CHECKERS DISPLAY BY C. SHAW 3/31/80
0000 0470 .PAGE
0480 ;
0020 0490 INTOFF = $20 ;USED TO GET INTERNAL CODE FOR UPPER CASE ALPHANUMERICS
0500 ;
0510 ;INTERNAL CHARACTER CODES
0520 ;
0000 0530 SPI = ' -INTOFF
0021 0540 AI = 'A-INTOFF
0023 0550 CI = 'C-INTOFF
0024 0560 DI = 'D-INTOFF
0025 0570 EI = 'E-INTOFF
0027 0580 GI = 'G-INTOFF
0028 0590 HI = 'H-INTOFF
0029 0600 II = 'I-INTOFF
002F 0610 OI = 'O-INTOFF
0030 0620 PI = 'P-INTOFF
0032 0630 RI = 'R-INTOFF
0034 0640 TI = 'T-INTOFF
0039 0650 YI = 'Y-INTOFF
0011 0660 N1I = '1-INTOFF
0018 0670 N8I = '8-INTOFF
0019 0680 N9I = '9-INTOFF
0010 0690 N0I = '0-INTOFF
0700 ;
0710 ;CHECKERS EQUATES
0720 ;
0730 ;CODES FOR SPECIAL CHECKERS CHARACTER SET
0740 ;
0000 0750 EMPTY = 0 ;EMPTY SQUARE
0001 0760 CHECKER= 1 ;ORDINARY CHECKER
0002 0770 KING = 2
0003 0780 CURS = 3 ;CURSOR (X)
0004 0790 BORDER = 4 ;USED FOR TOP AND BOTTOM BORDERS OF BOARD
0800 ;
0000 0810 CLP0 = 0 ;PLAYER 0 (HUMAN)
0080 0820 CLP1 = $80 ;PLAYER 1 (COMPUTER)
00C0 0830 CLBOR = $C0 ;BORDER COLOR (USED TO SET UP 2 MSB'S OF CHAR)
5000 0840 PMB = $5000 ;PLAYER MISSILE BASE ADDRESS & PROGRAM LOCATION
ATARI 800 CHECKERS DISPLAY BY C. SHAW 3/31/80
0000 0850 .PAGE
0860 ;
0870 ; RAM VARIABLES
0880 ;
0000 0890 *= PMB
5000 0900 BOARD *= *+32 ;CHECKER BOARD (ONLY 32 BLOCK SQUARES ARE USED)
5020 0910 T0 *= *+1 ;TEMP FOR MOVING BOARD TO MEM MAP
0920 ;
0930 ;PLAYER AND MISSILE GRAPHICS.
0940 ;PLAYERS ARE USED FOR SQUARES, MISSILES FOR LEFT AND RIGHT BORDERS.
0950 ;
5021 0960 *= PMB+$180
5180 0970 GRM03 *= *+$80 ;MISSILE GRAPHICS
5200 0980 GRP0 *= *+$80 ;PLAYER 0 GRAPHICS
5280 0990 GRP1 *= *+$80 ;PLAYER 1
5300 1000 GRP2 *= *+$80 ; 2
5380 1010 GRP3 *= *+$80 ; 3
1020 ;
5400 1030 TITL *= *+20 ;TOP LINE OF CHARS -- ATASCII MESSAGE
5414 1040 TOPBRD *= *+16 ;TOP BORDER OF BOARD
5424 1050 BRDSP *= 8*16+* ;BOARD DISPLAY
54A4 1060 BOTBRD *= *+16 ;BOTTOM BORDER
ATARI 800 CHECKERS DISPLAY BY C. SHAW 3/31/80
54B4 1070 .PAGE
1080 ;
1090 ;GP -- SPECIAL CHECKERS CHARACTER SET (ONLY CODES 0-4 ARE USED).
1100 ;
54B4 1110 *= PMB+$600
1120 GR
5600 00 1130 .BYTE 0,0,0,0,0,0,0,0 ; BLANK (0)
5601 00
5602 00
5603 00
5604 00
5605 00
5606 00
5607 00
5608 3C 1140 .BYTE $3C,$7E,$FF,$FF,$FF,$FF,$7E,$3C ;CHECKER (1)
5609 7E
560A FF
560B FF
560C FF
560D FF
560E 7E
560F 3C
5610 3C 1150 .BYTE $3C,$7E,$A5,$A5,$C3,$C3,$7E,$3C ;KING (2)
5611 7E
5612 A5
5613 A5
5614 C3
5615 C3
5616 7E
5617 3C
5618 C3 1160 .BYTE $C3,$66,$3C,$18,$18,$3C,$66,$C3 ;CURSOR (3)
5619 66
561A 3C
561B 18
561C 18
561D 3C
561E 66
561F C3
5620 00 1170 .BYTE 0,$FF,$FF,$FF,$FF,$FF,$FF,0 ;BORDER (4)
5621 FF
5622 FF
5623 FF
5624 FF
5625 FF
5626 FF
5627 00
ATARI 800 CHECKERS DISPLAY BY C. SHAW 3/31/80
5628 1180 .PAGE
1190 ;
1200 ;
1210 ;DISPLAY LIST
1220 ;
1230 DSP
5628 70 1240 .BYTE BLANK8 ;24 BLANK LINES
5629 70 1250 .BYTE BLANK8
562A 70 1260 .BYTE BLANK8
562B 46 1270 .BYTE RELOAD+6 ;LINES 0-7 MESSAGE LINE: 20 ACROSS X 5 COLOR X 1 LINE RESOLUTION CHARACTERS
562C 0054 1280 .WORD TITL
562E 80 1290 .BYTE INT+BLANK1 ;8. INTERRUPT TO CHANGE CHARACTER BASE ADDRESS AND CHANGE TO NARROW SCREEN.
562F 06 1300 .BYTE 6 ;9-16. TOP BORDER: 16 X 5 X 1 CHARS (LAST LINE IS TOP OF 1ST ROW OF SQUARES)
5630 10 1310 .BYTE BLANK2 ;17-18. TOP OF FIRST ROW OF SQUARES
1320 ; CHECKERBOARD (8 LINES OF CHARS WITH SPACES INBETWEEN - 22 LINES/SQUARE)
5631 07 1330 .BYTE 7 ;19-34. 16X5X2 LINE RESOLUTION CHARS
5632 50 1340 .BYTE BLANK6 ;35-40. FIRST 3 LINES=BOTTOM OF PREVIOUS SQUARE.
5633 07 1350 .BYTE 7 ;41-56
5634 50 1360 .BYTE BLANK6 ;57-62. LAST 3 LINES=TOP OF NEXT SQUARE.
5635 07 1370 .BYTE 7 ;63-78
5636 50 1380 .BYTE BLANK6 ;79-84
5637 07 1390 .BYTE 7 ;85-100
5638 50 1400 .BYTE BLANK6 ;101-106
5639 07 1410 .BYTE 7 ;107-122
563A 50 1420 .BYTE BLANK6 ;123-128
563B 07 1430 .BYTE 7 ;129-144
563C 50 1440 .BYTE BLANK6 ;145-150
563D 07 1450 .BYTE 7 ;151-166
563E 50 1460 .BYTE BLANK6 ;167-172
563F 07 1470 .BYTE 7 ;173-188
1480 ; NEXT THREE LINES ARE BOTTOM OF PREVIOUS SQUARE
5640 10 1490 .BYTE BLANK2 ;189-190. END OF NORMAL DISPLAY (SHOULD BE ON SCREEN ON ALL TV'S).
5641 06 1500 .BYTE 6 ;191-198. BOTTOM BORDER (MAY OVERSCAN, BUT NOT ESSENTIAL TO GAME PLAY)
5642 41 1510 .BYTE JMPWT ;WAIT FOR NEXT VBLANK, THEN START OVER
5643 2856 1520 .WORD DSP
1530 ;
1540 ;
1550 ;DSP -- DISPLAY LIST INTERRUPT HANDLER.
1560 ;CHANGES CHARACTER BASE AND WIDTH OF DISPLAY FOR SPECIAL CHECKERS GRAPHICS
1570 ;THE OS WILL CHANGE CHBASE BACK TO NORMAL DURING VERTICAL BLANK.
1580 ;
1590 NCHR
5645 48 1600 PHA
5646 A956 1610 LDA #GR/256
5648 8D09D4 1620 STA CHBASE
1630 ;
1640 ;INSTRUCTION FETCH DMA ENABLE, P/M 2 LINE RES, P/M DMA ENABLE, NARROW SCREEN (128 CLOCKS)
564B A92D 1650 LDA #$2D
564D 8D00D4 1660 STA DMACTL
5650 68 1670 PLA
5651 40 1680 RTI
ATARI 800 CHECKERS DISPLAY BY C. SHAW 3/31/80
5652 1690 .PAGE
1700 ;
1710 ;INITIALIZATION CODE -- START EXECUTION HERE
1720 ;
5652 1730 *= PMB+$700
1740 ;
1750 ;INIT OS'S DMACTL VRRIRBLE
1760 ;INSTRUCTION FETCH DMA ENABLE, P/M 2 LINE RES, P/M DMA ENABLE, STANDARD SCREEN (160 CLOCKS)
1770 ;
5700 A92E 1780 LDA #$2E
5702 8D2F02 1790 STA SDMCTL
1800 ;
1810 ;CLEAR RAM
1820 ;
5705 A900 1830 LDA #0
5707 AA 1840 TAX
1850 INITLP
5708 9D0050 1860 STA PMB,X
570B 9D0051 1870 STA PMB+$100,X
570E 9D0052 1880 STA PMB+$200,X
5711 9D0053 1890 STA PMB+$300,X
5714 9D0054 1900 STA PMB+$400,X
5717 E8 1910 INX
5718 D0EE 1920 BNE INITLP
1930 ;
1940 ;INITIALIZE MISSILE GRAPHICS FOR BORDERS
1950 ;
571A A90E 1960 LDA #$0E
571C A05E 1970 LDY #$5E
571E 999451 1980 LQPZ STA GRM03+$14,Y
5721 88 1990 DEY
5722 D0FA 2000 BNE LQPZ
2010 ;
2020 ;INITIALIZE TOP AND BOTTOM BORDERS.
2030 ;
5724 A010 2040 LDY #16
5726 A9C4 2050 LDA #CLBOR+BORDER
5728 991354 2060 TBLP STA TOPBRD-1,Y
572B 99A354 2070 STA BOTBRD-1,Y
572E 88 2080 DEY
572F D0F7 2090 BNE TBLP ; CONTINUE UNTIL Y=0
2100 ;
2110 ;INITIALIZE PLAYER GRAPHICS FOR SQUARES (CHECKER BOARD) Y=0
2120 ;
5731 A9F0 2130 LDA #$F0
5733 A20A 2140 IN2 LDX #10
5735 991852 2150 IN3 STA GRP0+$18,Y
5738 999852 2160 STA GRP1+$18,Y
573B 991853 2170 STA GRP2+$18,Y
573E 999853 2180 STA GRP3+$18,Y
2190 ;
5741 48 2200 PHA
5742 A90A 2210 LDA #$0A
5744 999851 2220 STA GRM03+$18,Y ;REST OF MISSILE GRAPHICS
5747 68 2230 PLA
5748 C8 2240 INY
5749 CA 2250 DEX
574A 10E9 2260 BPL IN3
574C 49FF 2270 EOR #$FF ;FILL IN OPPOSITE SQUARES
ATARI 800 CHECKERS DISPLAY BY C. SHAW 3/31/80
574E C058 2280 CPY #88
5750 90E1 2290 BCC IN2
5752 A008 2300 LDY #8
2310 ;
2320 ; INITIALIZE PLAYER AND MISSILE POSITIONS AND COLORS
2330 ;
5754 B9D857 2340 IN4 LDA ITBL,Y
5757 9900D0 2350 STA HPOSP0,Y
575A 8A 2360 TXA ;$FF
575B 9908D0 2370 STA SIZEP0,Y ;$03 INDICATES 4 TIMES NORMAL SIZE (REST IS DON'T CARE)
575E B9E057 2380 LDA ITBL1,Y
5761 99C002 2390 STA PCOLR0,Y
5764 88 2400 DEY
5765 10ED 2410 BPL IN4
2420 ;
2430 ;OS, ANTIC, POKEY INITIALIZATION
2440 ;
5767 A928 2450 LDA #DSP&$FF ; DISPLAY LIST START ADDRESS (LSB)
5769 8D3002 2460 STA SDLSTL
576C A956 2470 LDA #DSP/256 ; MSB OF ADDRESS
576E 8D3102 2480 STA SDLSTH
5771 A903 2490 LDA #3 ;ENABLE PLAYER/MISSILE DMA TO GRAPHICS REGS.
5773 8D1DD0 2500 STA GRACTL
5776 A950 2510 LDA #PMB/256 ;MSB OF ADDRESS OF PLAYER/MISSILE GRAPHICS
5778 8D07D4 2520 STA PMBASE
577B A914 2530 LDA #$14 ;5TH PLAYER ENABLE (USE PF3 FOR MISSILE COLOR), PF TAKES PRIO OVER PLAYERS
577D 8D6F02 2540 STA GPRIOR ;OS PRIORITY REG
5780 A945 2550 LDA #NCHR&$FF ;DISPLAY LIST INTERRUPT VECTOR (LSB)
5782 8D0002 2560 STA VDSLST
5785 A956 2570 LDA #NCHR/256
5787 8D0102 2580 STA VDSLST+1
578A 8E0ED4 2590 STX NMIEN ;X=$FF $C0 ENABLES DISPLAY LIST & VBLANK INTERRUPTS.
2600 ;
2610 ;INITIALIZE BOARD DISPLAY
2620 ;
578D A20B 2630 LDX #11
2640 BRDLP
578F A901 2650 LDA #CHECKER+CLP0 ;HUMAN PIECES ON SQUARES 0-11
5791 9D0050 2660 STA BOARD,X
5794 A981 2670 LDA #CHECKER+CLP1 ;COMPUTER PIECES ON SQUARES 20-31
5796 9D1450 2680 STA BOARD+20,X
5799 CA 2690 DEX
579A 10F3 2700 BPL BRDLP
2710 ;
2720 ;MOVE COPYRIGHT MESSAGE TO MESSAGE DISPLAY LINE
2730 ;
579C A213 2740 LDX #19
579E BDE957 2750 IN6 LDA COPY,X
57A1 9D0054 2760 STA TITL,X
57A4 CA 2770 DEX
57A5 10F7 2780 BPL IN6
2790 ;
2800 ;LOOP TO MOVE BOARD TO GRAPHICS AREA.
2810 ;THE CHECKERS PROGRAM LOGIC COULD BE ADDED HERE OR A VBLANK INTERRUPT COULD BE USED.
2820 ;
2830 LOOP
57A7 20AD57 2840 JSR UPCHR
57AA 4CA757 2850 JMP LOOP
2860 ;
ATARI 800 CHECKERS DISPLAY BY C. SHAW 3/31/80
2870 ;
2880 ;
2890 ;
2900 ;UPCHR -- SUBROUTINE TO MOVE 32 BYTES OF CHECKER BOARD TO DISPLAY RAM.
2910 ;
2920 UPCHR
57AD A21F 2930 LDX #31 ;SQUARE 31 = UPPER LEFT
57AF A000 2940 LDY #0
2950 UPLP1
57B1 A903 2960 LDA #4-1 ;4 SQUARES/LINE
57B3 8D2050 2970 STA T0
2980 UPLP2
57B6 BD0050 2990 LDA BOARD,X
57B9 992654 3000 STA BRDSP+2,Y ; FOR ROWS SHIFTED TO RIGHT
57BC BDFC4F 3010 LDA BOARD-4,X
57BF 993454 3020 STA BRDSP+$10,Y ; FOR ROWS SHIFTED TO LEFT
57C2 C8 3030 INY
57C3 C8 3040 INY
57C4 C8 3050 INY
57C5 C8 3060 INY
57C6 CA 3070 DEX
57C7 CE2050 3080 DEC T0
57CA 10EA 3090 BPL UPLP2
3100 ;
57CC 98 3110 TYA
57CD 18 3120 CLC
57CE 6910 3130 ADC #$10
57D0 A8 3140 TAY
57D1 8A 3150 TXA
57D2 E903 3160 SBC #4-1 ;CARRY IS CLEAR (SUBTRACT 4)
57D4 AA 3170 TAX
57D5 B0DA 3180 BCS UPLP1
57D7 60 3190 RTS
3200 ;
3210 ;
3220 ;
3230 ;
3240 ;DATA
3250 ;HORIZONTAL POSITION OF PLAYERS (SQUARES) AND MISSILES (SIDE BORDERS).
3260 ;M0=RIGHT BORDER, M1=LEFT BORDER
3270 ;M2 & M3 ARE PLACED WITH M1.
3280 ; P0, P1, P2, P3, M0, M1, M2, M2
3290 ITBL
57D8 3C 3300 .BYTE $3C,$5C,$7C,$9C,$BC,$38,$38,$38
57D9 5C
57DA 7C
57DB 9C
57DC BC
57DD 38
57DE 38
57DF 38
3310 ;
3320 ;COLOR TABLE
3330 ITBL1
57E0 34 3340 .BYTE $34,$34,$34,$34 ;4 PLAYERS (RED SQUARES)
57E1 34
57E2 34
57E3 34
57E4 36 3350 .BYTE $36 ;PF0 RED CHECKERS AND MESSAGES
ATARI 800 CHECKERS DISPLAY BY C. SHAW 3/31/80
57E5 88 3360 .BYTE $88 ;PF1 BLUE CHARACTERS
57E6 0E 3370 .BYTE $0E ;PF2 WHITE CHECKERS AND MESSAGES
57E7 26 3380 .BYTE $26 ;PF3 YELLOW BORDER (CHARS & MISSILES)
57E8 00 3390 .BYTE 0 ;BK: BLACK BACKGROUND
3400 ;
3410 ;"COPYRIGHT ATARI 1980" MESSAGE
3420 ;
0000 3430 OF = $00 ;FOR PF0 COLOR (RED)
0080 3440 OF2 = $80 ;FOR PF2 COLOR (WHITE)
0040 3450 OF3 = $40 ;FOR PF1 COLOR (BLUE)
3460 TGTBL
57E9 00 3470 COPY .BYTE SPI,CI+OF,OI+OF,PI+OF,YI+OF,RI+OF,II+OF,GI+OF,HI+OF,TI+OF
57EA 23
57EB 2F
57EC 30
57ED 39
57EE 32
57EF 29
57F0 27
57F1 28
57F2 34
57F3 A1 3480 .BYTE AI+OF2,TI+OF2,AI+OF2,RI+OF2,II+OF2,N1I+OF3,N9I+OF3,N8I+OF3,N0I+OF3
57F4 B4
57F5 A1
57F6 B2
57F7 A9
57F8 51
57F9 59
57FA 58
57FB 50
0 ERRORS
}}}