Jump to content
IGNORED

Remembering ATARI memory locations


SIO99

Recommended Posts

I've never owned an Atari 8 bit computer (or any other Atari computer), but it was one of the computers I was considering to be my first computer years ago. I wanted to learn to program games and applications. If things had been slightly different, then I'd have got an Atari, instead of the dreaded Commodore 64, which used a dialect of BASIC ported from earlier Commodore computers. These computers had no colour, no graphics, and no sound, which meant that the Commodore 64 had no commands for these facilities either! My Dad was paying for the computer, so that meant he had the final say, although he was actually only lending me the money! He phoned a shop and spoke to an assistant who told him “The Commodore is a better one than the Atari” and that was that! He was also impressed by the name Commodore Business Machines and the Commodore background in business, compared with Atari's background in games. We sold the Commodore 64 after about 11 months, with some books for about half the price of the computer, cassette deck and books together, after I found out how crap the BASIC was, that I could only use one channel sound from BASIC, and it only had 38K from BASIC, with no way of using 64K, not even from Machine Code. It certainly didn't encourage me to learn Assembly Language just to start doing simple things like drawing a line across the screen. Obviously, there was no market for Commodore 64 programs written in an extended BASIC, because these extended BASICs were Copyright and not many users had copies of them. BTW, I'm currently bidding on 3 Atari 8 bit computers on eBay, although 2 of these come without any storage device.

 

The Commodore 64 BASIC required programmers to memorise lots of 5 figure memory locations to use with the PEEK and POKE commands. During my recent investigations into Atari BASIC programming, I've found out that there are no commands for player missile graphics (or sprites), but instead you have to use PEEK and POKE. One or two listings I've seen made me think “OMG it looks as bad as a Commodore 64 program!” I don't know if any commands for this were added with the Atari XE range. I've read one or more documents on an emulators DVD and collected the following important memory locations which programmers should memorise. Perhaps there are a lot more than these, or perhaps not.

 

A good memory system is as follows. Various letters stand for certain numbers. Sometimes you have a choice of letter to use, which is usually a choice between voiced and unvoiced consonants (e.g. d and t, or g and k). Here's a list of what I mean.

 

0 – S, soft C, or Z

 

1 – T or D

 

2 – N

 

3 – M

 

4 – R

 

5 – L

 

6 – J, CH, or SH

 

7 – G or K

 

8 – F or V

 

9 – P or B

 

An easy way of remembering these letters is the list of words tea, Noah, May, ray, law, jaw, key, fee, pea.

 

Using these letters, you can make up words or phrases to help you remember numbers. Here's how this technique can be applied to important Atari memory locations. It helps if they conjure up an unusual or outlandish scene.

 

ATARI MEMORY LOCATIONS FOR PLAYER MISSILE GRAPHICS (SPRITES)

 

53248 Lemon roof (imagine a roof covered with slices of lemon, Horizontal Position Register for Player 0 HPOSP0)

 

53249 Lemon rap (imagine a rapper is juggling lemons while rapping, Horizontal Position Register for Player 1 HPOSP1)

 

53250 Lemon lace (imagine a shoelace made of lemon peel, Horizontal Position Register for Player 2 HPOSP2)

 

53251 Lemon Lad (imagine a boy superhero with a lemon emblem on his chest, Horizontal Position Register for Player 3 HPOSP3)

 

53277 – Lemon cake (Graphics Control Register GRACTL, POKE with 1 for missiles only, 2 for players only, 3 for players and missiles)

 

54279 – Lure on cob (start of Player Missile Graphics memory area, imagine a corn on the cob with something placed on top which is designed to lure a pest into a trap)

 

Finally, can someone think up some good words to remember the last three numbers below?

 

PLAYER COLOUR

 

Player Location

 

0 704 (kisser)

 

1 705 (????)

 

2 706 (????)

 

3 707 (????)

 

I compiled this list of memory locations for Player Missile Graphics, because it seems that's the only really important facility without dedicated commands. Perhaps someone would like to list some other important memory locations which are needed for some other facilities, then we can think up some good words or phrases to remember them by. I think the most likely facility may be for setting up custom graphics screens which mix different GRAPHICS modes on the same screen. I read about this memory system before getting a Commodore 64, but I must have thought there were too many numbers to remember. Even switching to a graphics screen required a few lines of BASIC including lots of POKEs!

Link to comment
Share on other sites

You don't need to remember a lot of hardware registers, they're usually in sets.

 

$D000 - player positions, followed by missiles. $D012 - PM0 colour, followed by other 3 players then 5 playfield regs.

$D201/2 - Audf1/Audc1 paired then 3 more pairs for the other channels.

 

But as Bryan said, equates if using Assembler.

 

For Basic, I can't think of much worse than variable names that don't relate in any way to the function being performed.

Link to comment
Share on other sites

To get Player missile to move at a usable speed In Basic when moving vertically (up and down) its best to store player data in strings because string handling is fast in atari basic or Turbo Basic Xl.

 

The book "player missile graphics in basic" has information on how to use strings for player missile data.

 

The book can be downloaded in Pdf file from www.Atarimania.com

 

Regards.

 

Jan.

Link to comment
Share on other sites

You asked for it :-)

 

It's not that useful as many use their own equates. This is just a short one I used a while ago.

 

(the question marks are inverse ATASCII characters that won't translate right)

 

 

10 ; ??????????????????????????????
20 ; |????????????????????????????|
30 ; ??????????????????????????????
40 ; last update: 19-Feb-2000
50 ;
60 ; SAVE#D:MACFOX.M65
70 ; ________________
80 ; ????????????????
90 ;
0100 IOCB0 = $0340   ; #0  E:
0110 IOCB1 = $0350   ; #1
0120 IOCB2 = $0360   ; #1
0130 IOCB3 = $0370   ; #3
0140 IOCB4 = $0380   ; #4
0150 IOCB5 = $0390   ; #5
0160 IOCB6 = $03A0   ; #6  S:
0170 IOCB7 = $03B0   ; #7  lprint
0180 ; ___________________
0190 ;
0200 ;????????   X=Chan.*16
0210 ;
0220 ;0=$00, 2=$20, 5=$50, etc..
0230 ;
0240 ICDNO = $0341   ;Device#
0250 ICCOM = $0342   ;Command
0260 ICSTA = $0343   ;Recent Status
0270 ICBADR = $0344  ;Filename/Buf.
0280 ICPUT = $0346   ;Put-byte -1
0290 ICBLEN = $0348  ;Buffer-Lenght
0300 ICAUX1 = $034A  ;Aux-byte 1
0310 ICAUX2 = $034B  ;Aux-byte 2
0320 ICAUX3 = $034C  ;Aux-byte 3
0330 ICAUX4 = $034D  ;Aux-byte 4
0340 ICAUX5 = $034E  ;Aux-byte 5
0350 ICAUX6 = $034F  ;Aux-byte 6
0360 ; ___________________
0370 ; ???????????????????
0380 ;
0390 COPEN = 3	   ;Open
0400 CGET =  5	   ;Get Text
0410 CBGET = 7	   ;Get Binary
0420 CPUT =  9	   ;Put Text
0430 CBPUT = 11	  ;Put Binary
0440 CCLOSE = 12	 ;Close Channel
0450 CSTATUS = 13    ;Get Status
0460 CRENAME = 32    ;Rename File
0470 CERASE = 33	 ;Erase File
0480 CLOCK = 34	  ;Lock Disk
0490 CPROTECT = 35   ;Protect
0500 CUNPROTECT = 36 ;UnProtect
0510 CPOINT = 37	 ;Point
0520 CNOTE = 38	  ;Note
0530 CGETLEN = 39    ;Get Filelenght
0540 CBLOAD = 40	 ;Load Binary
0550 CBSAVE = 41	 ;Save Binary
0560 CCREDIR = 42    ;Make Directory
0570 CDELDIR = 43    ;Remove Dir.
0580 CCWD =  44	  ;Change Dir.
0590 CBOOT = 45	  ;Make Bootfile
0600 CUNLOCK = 46    ;UnLock Disk
0610 CAINIT = 47	 ;Format DOS 2.5
0620 ; _________________
0630 ; ?????????????????
0640 ;
0650 AREAD = 4	   ;Open Input
0660 AWRITE = 8	  ;Open Output
0670 AUPDATE = 12    ;Open Update
0680 AAPPEND = 9	 ;Open Append
0690 ADIR =  6	   ;Open Directory
0700 AREADDIR = 20   ;RawDir as file
0710 AUPDATEDIR = 24 ;Update RawDir
0720 AOPENSUB = 36   ;Read SubDir
0730 ;
0740 ; __________________
0750 ; ??????????????????
0760 COMTAB = $0A
0770 DOSINI = $0C
0780 ATT =   $4D
0790 LMARG = $52
0800 RMARG = $53
0810 SPARTA = $53
0820 YPOS =  $54
0830 XPOS =  $55
0840 EOL =   $9B
0850 SDLIST = $0230
0860 SDLINT = $0200
0870 PADDLE0 = $0270
0880 PADDLE1 = $0271
0890 PADDLE2 = $0272
0900 PADDLE3 = $0273
0910 STICK0 = $0278
0920 STICK1 = $0279
0930 STRIG0 = $0284
0940 STRIG1 = $0285
0950 COL0 =  $02C4
0960 COL1 =  $02C5
0970 COL2 =  $02C6
0980 COL3 =  $02C7
0990 COL4 =  $02C8
1000 KRPDEL = $02D9
1010 KEYREP = $02DA
1020 DMA =   $022F
1030 HLPFLG = $02DC
1040 MEMTOP = $02E5  ;Hi-Mem. Pointer
1050 MEMLO = $02E7   ;Lo-Mem. Pointer
1060 CURSOR = $02F0
1070 CHBAS = $02F4   ;Font-Start
1080 KEY =   $02FC   ;Read Keypress
1090 DOS =   $0700   ;
1100 VERSION = $0701 ;Sparta-Version
1110 COLOR0 = $D016
1120 COLOR1 = $D017
1130 COLOR2 = $D018
1140 COLOR3 = $D019
1150 COLOR4 = $D01A
1160 CONSOL = $D01F  ;Function-Keys
1170 RANDOM = $D20A  ;Random Number
1180 PIA =   $D301
1190 WSYNC = $D40A
1200 NMIEN = $D40E
1210 CIOV =  $E456
1220 SIOV =  $E459
1230 VPRINT = $FFD8
1240 VKEYON = $FFDB

Link to comment
Share on other sites

  • 2 years later...

Hej JAC!

 

Fantastic job with your memory map equates. I also like decimal numbers on the right and all English descriptions. No need for any other editing of my own memory map. A question... Would you allow me to use it in Effectus project as equates, because it is really well put together. You will absolutely be credited in my project.

 

Greetings

Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

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...