Jump to content
Savetz

Atari 800 Pac Man source code

Recommended Posts

Yes, it would make perfect sense that this is the code basis for all the other versions.  So Andreasen created the 5200 port by updating this version's ghost logic and reprogramming the controls for analog.  The funny things is, Ron Borta from Roklan claimed that they studied the arcade version extensively and tried to replicate the ghost behavior exactly.  So what changes were made to the 5200 port, and which version has more arcade-like behavior?

Share this post


Link to post
Share on other sites




Here's something amazing that's turned up: the original, commented source code for the Atari 8-bit version of Pac Man.

159204252_Screenshot2019-08-27at6_17_41PM.thumb.png.f213d103f49d3e90f972e40d1a8e6936.png


Whoah! Nice...


Sent from my UL40 using Tapatalk

Share this post


Link to post
Share on other sites
On 8/29/2019 at 10:23 PM, ijor said:

Yes, that was more or less clear. Less clear is if the modifications or additions to assemble multiple Pac Man versions from the MADS source is based on original material, or not (it combines original source with reverse engineered code). Or, if you want, the source covers just one version of Pac Man, and if so which one.

 

Thanks

The archive "PAC-MAN_Source_Code_Macro_Assembler.zip" contains the original source code in original format. In that set of files, one was misssing. That file named "PACDAT1.ASM" contained only charset and display list data, not code and was restored from the binary. So if you happen to have an original Atari DEV environment you should be able to verify it 🙂
 

;	MISSING LABELS & DATA

PACCHR
	.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3C,$3C,$00,$00,$00
	.byte $3C,$3C,$FF,$FF,$FF,$FF,$3C,$3C,$00,$00,$01,$04,$04,$04,$04,$04
	.byte $00,$00,$40,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$40,$00,$00
	.byte $04,$04,$04,$04,$04,$01,$00,$00,$00,$00,$55,$00,$00,$50,$04,$04
	.byte $00,$00,$40,$10,$10,$40,$00,$00,$00,$00,$55,$00,$00,$05,$10,$10
	.byte $00,$00,$01,$04,$04,$01,$00,$00,$00,$00,$FF,$00,$00,$00,$00,$00
	.byte $00,$00,$55,$00,$00,$55,$00,$00,$04,$04,$04,$04,$04,$04,$04,$04
	.byte $00,$00,$55,$00,$00,$00,$00,$00,$10,$10,$10,$10,$10,$10,$10,$10
	.byte $00,$00,$00,$00,$00,$55,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01
	.byte $01,$01,$01,$01,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01
	.byte $40,$40,$40,$40,$40,$40,$40,$40,$00,$00,$55,$00,$00,$50,$04,$04
	.byte $00,$00,$55,$00,$00,$05,$10,$10,$04,$04,$50,$00,$00,$55,$00,$00
	.byte $10,$10,$05,$00,$00,$55,$00,$00,$10,$10,$05,$00,$00,$05,$10,$10
	.byte $04,$04,$50,$00,$00,$50,$04,$04,$3C,$FF,$3F,$0F,$3F,$FF,$3C,$00
	.byte $00,$00,$15,$40,$00,$05,$10,$10,$10,$10,$05,$00,$40,$15,$00,$00
	.byte $00,$00,$54,$01,$00,$50,$04,$04,$04,$04,$50,$00,$01,$54,$00,$00
	.byte $00,$00,$00,$00,$40,$40,$40,$40,$40,$40,$40,$40,$00,$00,$00,$00
	.byte $00,$3F,$3C,$3C,$3F,$3C,$3C,$00,$00,$F0,$3C,$3C,$F0,$F0,$3C,$00
	.byte $00,$FF,$F0,$FF,$F0,$F0,$FF,$00,$00,$C0,$03,$0F,$0F,$0F,$CF,$00
	.byte $00,$F0,$FC,$0F,$0F,$FF,$0F,$00,$00,$3F,$3C,$3C,$3C,$3C,$3F,$00
	.byte $00,$C0,$F0,$3C,$3C,$F0,$C0,$00,$00,$F0,$F0,$3F,$0F,$0F,$0F,$00
	.byte $00,$F3,$F3,$C3,$00,$03,$03,$00,$00,$C0,$C0,$C0,$00,$C0,$C0,$00
	.byte $00,$3F,$F0,$F0,$F3,$F0,$3F,$00,$00,$F0,$00,$03,$F3,$F3,$F3,$00
	.byte $00,$3C,$FF,$C3,$C3,$FF,$C3,$00,$00,$0F,$0F,$CF,$CF,$CF,$CF,$00
	.byte $00,$03,$CF,$FF,$33,$03,$03,$00,$00,$CF,$CF,$CF,$CF,$CF,$CF,$00
	.byte $00,$FC,$00,$F0,$00,$00,$FC,$00,$00,$00,$03,$03,$03,$03,$00,$00
	.byte $00,$FF,$C3,$C3,$C3,$C3,$FF,$00,$00,$0F,$CF,$CF,$CF,$C3,$00,$00
	.byte $00,$3C,$3C,$3C,$3C,$F0,$C0,$00,$00,$FF,$F0,$FF,$F0,$F0,$FF,$00
	.byte $00,$CF,$0F,$0F,$0F,$0F,$CF,$00,$00,$FC,$0F,$0F,$FC,$3C,$0F,$00
	.byte $00,$03,$0C,$2A,$2A,$2A,$3A,$2A,$30,$F0,$30,$A8,$A8,$E8,$A8,$00
	.byte $03,$0F,$2A,$2E,$2A,$2B,$0A,$02,$00,$C0,$A0,$E0,$A0,$A0,$80,$00
	.byte $02,$02,$0F,$3F,$3F,$3F,$3F,$0F,$00,$00,$C0,$F0,$F0,$F0,$F0,$C0
	.byte $03,$0A,$2A,$2A,$2A,$2A,$2A,$0A,$00,$80,$A0,$A0,$E0,$E0,$A0,$80
	.byte $03,$03,$0A,$2A,$2A,$2A,$2A,$0A,$00,$00,$80,$A0,$A0,$A0,$A0,$80
	.byte $03,$03,$05,$15,$15,$15,$15,$05,$00,$00,$40,$50,$50,$50,$50,$40
	.byte $22,$22,$22,$22,$22,$A2,$82,$82,$20,$20,$20,$20,$20,$28,$08,$08
	.byte $11,$11,$11,$11,$11,$51,$41,$41,$10,$10,$10,$10,$10,$14,$04,$04
	.byte $03,$0D,$3F,$3F,$3F,$3A,$2B,$0A,$00,$C0,$F0,$F0,$F0,$B0,$A0,$80
	.byte $0A,$08,$0A,$03,$03,$03,$03,$03,$A0,$20,$A0,$C0,$F0,$C0,$F0,$C0
	.byte $00,$03,$00,$00,$00,$00,$03,$00,$C0,$C3,$C3,$C3,$C3,$C3,$F0,$00
	.byte $3F,$00,$00,$03,$00,$30,$0F,$00,$F0,$33,$C3,$C3,$33,$33,$C0,$00
	.byte $3F,$30,$3F,$00,$00,$30,$0F,$00,$F0,$03,$C3,$33,$33,$33,$C0,$00
	.byte $3F,$00,$00,$03,$0C,$0C,$0C,$00,$F0,$33,$C3,$03,$03,$03,$00,$00
	.byte $03,$0F,$03,$03,$03,$03,$0F,$00,$03,$0C,$0C,$0C,$0C,$0C,$C3,$00
	.byte $3F,$C0,$00,$0F,$30,$C0,$FF,$00,$03,$CC,$CC,$0C,$0C,$0C,$C3,$00
	.byte $FF,$00,$03,$0F,$00,$C0,$3F,$00,$C3,$CC,$0C,$0C,$CC,$CC,$03,$00
	.byte $FF,$C0,$FF,$00,$00,$C0,$3F,$00,$C3,$0C,$0C,$CC,$CC,$CC,$03,$00
	.byte $C0,$33,$33,$33,$33,$33,$C0,$00,$F0,$0C,$0C,$0C,$0C,$0C,$F0,$00
	.byte $3C,$C3,$C3,$C3,$C3,$C3,$3C,$00,$00,$00,$55,$00,$00,$54,$01,$01
	.byte $01,$01,$54,$00,$00,$55,$00,$00,$00,$00,$55,$00,$00,$15,$40,$40
	.byte $40,$40,$15,$00,$00,$55,$00,$00,$00,$AA,$A0,$A0,$AA,$A0,$A0,$00
	.byte $00,$82,$A2,$A2,$82,$02,$02,$00,$00,$80,$80,$80,$80,$80,$AA,$00
	.byte $00,$02,$0A,$28,$28,$2A,$28,$00,$00,$02,$82,$A0,$A0,$A0,$A0,$00
	.byte $00,$82,$82,$AA,$28,$28,$28,$00,$00,$8A,$8A,$0A,$0A,$0A,$0A,$00
	.byte $00,$A8,$00,$A0,$00,$00,$A8,$00,$00,$AA,$A0,$A0,$AA,$A2,$A0,$00
	.byte $00,$80,$A0,$A0,$80,$80,$A0,$00,$00,$00,$02,$00,$00,$00,$0A,$00
	.byte $00,$A0,$A0,$A0,$A0,$A0,$AA,$00,$00,$02,$0A,$00,$00,$02,$0A,$00
	.byte $00,$A8,$0A,$28,$A0,$80,$AA,$00

DATMAZ
	.byte $00,$11,$1C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C
	.byte $0C,$0C,$0C,$15,$16,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C
	.byte $0C,$0C,$0C,$0C,$0C,$1E,$20,$00,$00,$13,$0F,$01,$01,$01,$01,$01
	.byte $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$0D,$0F,$01,$01,$01
	.byte $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$0D,$14,$00
	.byte $00,$13,$0F,$01,$03,$0E,$0E,$0E,$04,$01,$03,$0E,$0E,$0E,$0E,$0E
	.byte $0E,$04,$01,$0D,$0F,$01,$03,$0E,$0E,$0E,$0E,$0E,$0E,$04,$01,$03
	.byte $0E,$0E,$0E,$04,$01,$0D,$14,$00,$00,$13,$0F,$02,$06,$10,$10,$10
	.byte $05,$01,$06,$10,$10,$10,$10,$10,$10,$05,$01,$06,$05,$01,$06,$10
	.byte $10,$10,$10,$10,$10,$05,$01,$06,$10,$10,$10,$05,$02,$0D,$14,$00
	.byte $00,$13,$0F,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
	.byte $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
	.byte $01,$01,$01,$01,$01,$0D,$14,$00,$00,$13,$0F,$01,$0A,$0C,$0C,$0C
	.byte $08,$01,$03,$0E,$04,$01,$0A,$0C,$0C,$0C,$0C,$07,$09,$0C,$0C,$0C
	.byte $0C,$08,$01,$03,$0E,$04,$01,$0A,$0C,$0C,$0C,$08,$01,$0D,$14,$00
	.byte $00,$13,$0F,$01,$01,$01,$01,$01,$01,$01,$0D,$00,$0F,$01,$01,$01
	.byte $01,$01,$01,$0D,$0F,$01,$01,$01,$01,$01,$01,$0D,$00,$0F,$01,$01
	.byte $01,$01,$01,$01,$01,$0D,$14,$00,$00,$12,$1D,$0C,$0C,$0C,$0C,$61
	.byte $04,$01,$0D,$00,$19,$0C,$0C,$0C,$0C,$08,$00,$06,$05,$00,$0A,$0C
	.byte $0C,$0C,$0C,$1A,$00,$0F,$01,$03,$63,$0C,$0C,$0C,$0C,$1F,$21,$00
	.byte $00,$00,$00,$00,$00,$00,$00,$13,$0F,$01,$0D,$00,$0F,$00,$00,$00
	.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0D,$00,$0F,$01,$0D
	.byte $14,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0C,$0C,$0C,$0C,$0C,$62
	.byte $05,$01,$06,$10,$05,$00,$03,$0E,$0E,$0E,$0E,$0B,$0B,$0E,$0E,$0E
	.byte $0E,$04,$00,$06,$10,$05,$01,$06,$64,$0C,$0C,$0C,$0C,$0C,$00,$00
	.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$00,$00,$00,$0D,$00
	.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$0F,$00,$00,$00,$00,$01,$00
	.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0C,$0C,$0C,$0C,$0C,$61
	.byte $04,$01,$03,$0E,$04,$00,$06,$10,$10,$10,$10,$10,$10,$10,$10,$10
	.byte $10,$05,$00,$03,$0E,$04,$01,$03,$63,$0C,$0C,$0C,$0C,$0C,$00,$00
	.byte $00,$00,$00,$00,$00,$00,$00,$13,$0F,$01,$0D,$00,$0F,$00,$00,$00
	.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0D,$00,$0F,$01,$0D
	.byte $14,$00,$00,$00,$00,$00,$00,$00,$00,$11,$1C,$0C,$0C,$0C,$0C,$62
	.byte $05,$01,$06,$10,$05,$00,$0A,$0C,$0C,$0C,$0C,$07,$09,$0C,$0C,$0C
	.byte $0C,$08,$00,$06,$10,$05,$01,$06,$64,$0C,$0C,$0C,$0C,$1E,$20,$00
	.byte $00,$13,$0F,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
	.byte $01,$01,$01,$0D,$0F,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
	.byte $01,$01,$01,$01,$01,$0D,$14,$00,$00,$13,$0F,$01,$0A,$0C,$0C,$15
	.byte $04,$01,$0A,$0C,$0C,$0C,$0C,$0C,$0C,$08,$01,$06,$05,$01,$0A,$0C
	.byte $0C,$0C,$0C,$0C,$0C,$08,$01,$03,$16,$0C,$0C,$08,$01,$0D,$14,$00
	.byte $00,$13,$0F,$02,$01,$01,$01,$0D,$0F,$01,$01,$01,$01,$01,$01,$01
	.byte $01,$01,$01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$0D
	.byte $0F,$01,$01,$01,$02,$0D,$14,$00,$00,$13,$19,$0C,$0C,$08,$01,$06
	.byte $05,$01,$03,$0E,$04,$01,$0A,$0C,$0C,$0C,$0C,$07,$09,$0C,$0C,$0C
	.byte $0C,$08,$01,$03,$0E,$04,$01,$06,$05,$01,$0A,$0C,$0C,$1A,$14,$00
	.byte $00,$13,$0F,$01,$01,$01,$01,$01,$01,$01,$0D,$00,$0F,$01,$01,$01
	.byte $01,$01,$01,$0D,$0F,$01,$01,$01,$01,$01,$01,$0D,$00,$0F,$01,$01
	.byte $01,$01,$01,$01,$01,$0D,$14,$00,$00,$13,$0F,$01,$0A,$0C,$0C,$0C
	.byte $0C,$0C,$17,$10,$18,$0C,$0C,$0C,$0C,$08,$01,$06,$05,$01,$0A,$0C
	.byte $0C,$0C,$0C,$17,$10,$18,$0C,$0C,$0C,$0C,$0C,$08,$01,$0D,$14,$00
	.byte $00,$13,$0F,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
	.byte $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
	.byte $01,$01,$01,$01,$01,$0D,$14,$00,$00,$12,$1D,$0C,$0C,$0C,$0C,$0C
	.byte $0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C
	.byte $0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$1F,$21,$00
	.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
	.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
	.byte $00,$00,$00,$00,$00,$00,$00,$00

ODLIST
	.byte $70,$70,$42,$00,$28,$02,$C6,$00,$24,$07,$07,$86,$06,$06,$06,$06
	.byte $86,$04,$86,$06,$06,$06,$06,$06,$06,$06,$06,$86,$44,$70,$17,$41, a(ODLIST)

DLIST
	.byte $70,$70,$42,$00,$28,$82,$C4,$00,$14,$04,$04,$04,$04,$04,$04,$04
	.byte $04,$04,$84,$04,$04,$04,$04,$04,$04,$04,$04,$04,$84,$84,$04,$F0
	.byte $41,a(DLIST)

ADLIST
	.byte $70,$70,$C2,$00,$28,$02,$46,$00,$30,$06,$86,$06,$06,$06,$06,$06
	.byte $06,$06,$86,$06,$06,$06,$86,$06,$06,$06,$06,$06,$86,$06,$44,$70
	.byte $17,$41,a(ADLIST)
NULLDL
	.byte $70,$70,$70,$41,a(NULLDL)

INTDLC
	.byte $70,$70,$70,$42,$00,$28,$02,$F0,$70,$70,$70,$70,$70,$70,$70,$70
	.byte $70,$54,$00,$2C,$54,$50,$2C,$54,$A0,$2C,$41,$80,$06

The MADS version of the code is a 1:1 syntax format conversion of the original code that compiles to the exact same result at the exact same locations.
No logic or semantic changes have been applied.
The differences in the Atari/DataSoft/etc. versions can be found in the source by looking for the "VERSION" string.
By specifying -DVERSION=1 to 4 you can control which of the variants is built.
All variants are 100% identical to the respective original (unpacked, decoded) binary. 

  • Like 6

Share this post


Link to post
Share on other sites

Github is an online code repository that most people use these days. JAC is the guy that released the code and did the MADS translation (see the post 3 up from here).

Share this post


Link to post
Share on other sites
19 hours ago, dukdukgoos said:

Maybe put these on Github JAC? For preservation and easy forking?

Well, that would apply to basically everything on AtariWiki. Also I would not want such code (copyright...) to be under my personal git. We consider AtariWiki itself as the right central place for preservation.

  • Like 2

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...