Jump to content
IGNORED

Atari 7800 Programming: Help?


Recommended Posts

Hello. My name is Donavin. I really want to become an Atari 7800 home-brewer. When I found out game programmers were still making games for the Atari systems, I felt like I should jump right into the party. I was wondering if anyone knows a good software I can use to code for the Atari 7800. I would appreciate the help.

Edited by DonavinTheSuperGamer
Link to comment
Share on other sites

If you're not heavily familiar with 6502 assembly I'd start with c64 to begin with until your knowledge of 6502 is good enough to develop for a good system.Their is also 7800 basic if you choose the basic route.If you can understand some of my code than 6502 is for you if not basic is the correct choice for now.

;=======================================================    
Do_Div16:
    lsr
Do_Div8:    
    lsr
    lsr
    lsr
    rts
    
;=======================================================     
DrawStage:
    lda $d011
    and #%11101111
    sta $d011
    jsr ClearScreen                       ;Exit With Y = 0
    lda #<ScreenRam
    sta _TmpPointer2+0
    sta _TmpPointer1+0
    lda #>ScreenRam
    sta _TmpPointer2+1
    lda #>ScreenColorRam
    sta _TmpPointer1+1
    lda _CurrentStage
    asl
    tax
    lda ScreenStructureTable+0,x
    sta _TmpPointer3+0
    lda ScreenStructureTable+1,x
    sta _TmpPointer3+1
DrawLoop:
    lda (_TmpPointer3),y
    sta _Tmp1
    jsr Do_ModTmpPointer3
    lda (_TmpPointer3),y
    sta _Tmp3
    jsr Do_ModTmpPointer3
    lda (_TmpPointer3),y
    sta _Tmp4
    jsr Do_ModTmpPointer3
-:    
    lda _Tmp3
    sta (_TmpPointer2),y
    jsr Do_ModTmpPointer2
    lda _Tmp4
    sta (_TmpPointer1),y
    jsr Do_ModTmpPointer1
    dec _Tmp1
    bne -
    lda (_TmpPointer3),y
    bne DrawLoop    
    iny                               
    lda (_TmpPointer3),y              
    pha
    and #%11110000
    jsr Do_Div16
    sta BackgroundExtraColor1         
    pla
    and #%00001111
    sta BackgroundExtraColor2         
    lda $d011
    ora #%00010000
    sta $d011
    rts  
    
;=======================================================     
Do_ModTmpPointer2:    
    lda _TmpPointer2+0
    clc
    adc #1
    sta _TmpPointer2+0
    bcc +
    inc _TmpPointer2+1
+:    
    rts
;=======================================================     
Do_ModTmpPointer1:    
    lda _TmpPointer1+0
    clc
    adc #1
    sta _TmpPointer1+0
    bcc +
    inc _TmpPointer1+1
+:    
    
    rts
;======================================================= 
Do_ModTmpPointer3:    
    lda _TmpPointer3+0
    clc
    adc #1
    sta _TmpPointer3+0
    bcc +
    inc _TmpPointer3+1
+:    
    rts
;=======================================================     
ScreenStructureTable:
!word Screen1Data    
!word Screen2Data
!word Screen3Data    
!word Screen4Data
;=======================================================    

Edited by OmegaPrime
  • Like 1
Link to comment
Share on other sites

It sounds very interesting. However, when I ask for download, it gives me .7z files that my computer doesn't know how to run. Also, it's in a language I do not understand.

 

Thanks. This is very interesting; being able to create graphics faster and more efficiently. I can use this for reference in the future. This is very helpful.

 

 

If you're not heavily familiar with 6502 assembly I'd start with c64 to begin with until your knowledge of 6502 is good enough to develop for a good system.Their is also 7800 basic if you choose the basic route.If you can understand some of my code than 6502 is for you if not basic is the correct choice for now.

;=======================================================    
Do_Div16:
    lsr
Do_Div8:    
    lsr
    lsr
    lsr
    rts
    
;=======================================================     
DrawStage:
    lda $d011
    and #%11101111
    sta $d011
    jsr ClearScreen                       ;Exit With Y = 0
    lda #<ScreenRam
    sta _TmpPointer2+0
    sta _TmpPointer1+0
    lda #>ScreenRam
    sta _TmpPointer2+1
    lda #>ScreenColorRam
    sta _TmpPointer1+1
    lda _CurrentStage
    asl
    tax
    lda ScreenStructureTable+0,x
    sta _TmpPointer3+0
    lda ScreenStructureTable+1,x
    sta _TmpPointer3+1
DrawLoop:
    lda (_TmpPointer3),y
    sta _Tmp1
    jsr Do_ModTmpPointer3
    lda (_TmpPointer3),y
    sta _Tmp3
    jsr Do_ModTmpPointer3
    lda (_TmpPointer3),y
    sta _Tmp4
    jsr Do_ModTmpPointer3
-:    
    lda _Tmp3
    sta (_TmpPointer2),y
    jsr Do_ModTmpPointer2
    lda _Tmp4
    sta (_TmpPointer1),y
    jsr Do_ModTmpPointer1
    dec _Tmp1
    bne -
    lda (_TmpPointer3),y
    bne DrawLoop    
    iny                               
    lda (_TmpPointer3),y              
    pha
    and #%11110000
    jsr Do_Div16
    sta BackgroundExtraColor1         
    pla
    and #%00001111
    sta BackgroundExtraColor2         
    lda $d011
    ora #%00010000
    sta $d011
    rts  
    
;=======================================================     
Do_ModTmpPointer2:    
    lda _TmpPointer2+0
    clc
    adc #1
    sta _TmpPointer2+0
    bcc +
    inc _TmpPointer2+1
+:    
    rts
;=======================================================     
Do_ModTmpPointer1:    
    lda _TmpPointer1+0
    clc
    adc #1
    sta _TmpPointer1+0
    bcc +
    inc _TmpPointer1+1
+:    
    
    rts
;======================================================= 
Do_ModTmpPointer3:    
    lda _TmpPointer3+0
    clc
    adc #1
    sta _TmpPointer3+0
    bcc +
    inc _TmpPointer3+1
+:    
    rts
;=======================================================     
ScreenStructureTable:
!word Screen1Data    
!word Screen2Data
!word Screen3Data    
!word Screen4Data
;=======================================================    

Wow. That is REALLY complicated. THAT'S 6502? That's insane. I can't even tell what this is supposed to make the system do. I'm used to BASIC. I wonder if there is a program that lets me write 7800 games in BASIC. At least I know that language a bit.

Link to comment
Share on other sites

 

http://www.7-zip.org

 

there is polish and english version of manual

 

for pascal manual you will need use google translator :P

Thanks! I did that and it makes more sense now. So I have to extract the .7z files. So I did that, and now I don't know what to do, I found some .bat and .exe files, but they close instantly when I run them. Other than that, there's a bunch of .pas, .obx, and .cgsyn files that the computer can't run either. Do I have to somehow extract those too, or am I doing something wrong?

Link to comment
Share on other sites

in MADS package you got 7800 examples, all need to be compiled and signed to run on real hardware or emulator (a78 header need to added too)

 

my build bat file:

bin\mads.exe a78-robbo.asm -o:a78-robbo.a78
bin\a78sign.exe -f a78-robbo.a78 

my a78 file header

;******* a78 ROM file header ****************************
.array tab [128] .byte = $00
[0] = 1			            ; wersja nagłówka
[1] = 'ATARI7800'		    ; 
[17] = 'ROBBO 7800'		    ; title
[49] = $00,$02,$00,$00		    ; size (4 bajty)
[53] = %00000000              ; bit 0 - Activision BS mode
                              ; bit 1 - Absolute BS mode
[54] = %00000110	      ; typ cartridge'a
			      ; bit 0 - pokey
			      ; bit 1 - supercart bankswitched
			      ; bit 2 - supercart ram
                              ; bit 3 - ROM at $4000
                              ; bit 4 - Bank 6 at $4000
[55] = 1		      ; kontroler port 1
[56] = 0		      ; kontroler port 2
			      ; 0 = brak
			      ; 1 = joystick
			      ; 2 = lightgun
[57] = 1		      ; PAL ???
[58] = 1                      ; HSC
[63] = 1                      ; XM
[100] = 'ACTUAL CART DATA STARTS HERE'
.enda
;******* End of a78 ROM file header **********************
Link to comment
Share on other sites

 

in MADS package you got 7800 examples, all need to be compiled and signed to run on real hardware or emulator (a78 header need to added too)

 

my build bat file:

bin\mads.exe a78-robbo.asm -o:a78-robbo.a78
bin\a78sign.exe -f a78-robbo.a78 

my a78 file header

;******* a78 ROM file header ****************************
.array tab [128] .byte = $00
[0] = 1			            ; wersja nagłówka
[1] = 'ATARI7800'		    ; 
[17] = 'ROBBO 7800'		    ; title
[49] = $00,$02,$00,$00		    ; size (4 bajty)
[53] = %00000000              ; bit 0 - Activision BS mode
                              ; bit 1 - Absolute BS mode
[54] = %00000110	      ; typ cartridge'a
			      ; bit 0 - pokey
			      ; bit 1 - supercart bankswitched
			      ; bit 2 - supercart ram
                              ; bit 3 - ROM at $4000
                              ; bit 4 - Bank 6 at $4000
[55] = 1		      ; kontroler port 1
[56] = 0		      ; kontroler port 2
			      ; 0 = brak
			      ; 1 = joystick
			      ; 2 = lightgun
[57] = 1		      ; PAL ???
[58] = 1                      ; HSC
[63] = 1                      ; XM
[100] = 'ACTUAL CART DATA STARTS HERE'
.enda
;******* End of a78 ROM file header **********************

I am terribly sorry if I am making this difficult. How exactly do I compile these files?

Link to comment
Share on other sites

put header on top of asm example, change size and params

then use command line like in my bat file

 

check this site, here you will find sign.exe app

 

http://www.atarihq.com/danb/a7800.shtml

Okay. This is much more tedious than I thought it would be. I wish there was just a program that could take BASIC and turned it into 6502.

Link to comment
Share on other sites

Thanks guys for all of the help. I greatly appreciate it. ;) :thumbsup:

 

You know what I really wish? I wish that guy who made Pac-Man Collection was here to help. (I think his name was Bob or something [maybe PacManPlus?]) I don't remember. I just know he made some of the best games I ever bought. Maybe he could give me some pointers on what he uses.

Link to comment
Share on other sites

Okay. This is much more tedious than I thought it would be. I wish there was just a program that could take BASIC and turned it into 6502.

 

Well... 7800Basic -does- generate the assembly code of it prior to making the executable. (if you compiled game.bas, it'd leave (Among other files) game.asm, game.a78, and game.bin in the same directory.

 

You can also use inline assembly inside a basic file.

  • Like 1
Link to comment
Share on other sites

Thanks guys for all of the help. I greatly appreciate it. ;) :thumbsup:

 

You know what I really wish? I wish that guy who made Pac-Man Collection was here to help. (I think his name was Bob or something [maybe PacManPlus?]) I don't remember. I just know he made some of the best games I ever bought. Maybe he could give me some pointers on what he uses.

You mean this guy? http://atariage.com/forums/user/1787-pacmanplus/ He uses assembly language (DASM, I think, but not sure) to make most of his games. If assembly is giving you a headache, then you may want to try 7800Basic. As Mord mentioned above, the Basic file is generated into assembly code. There are also samples to get you started.

Link to comment
Share on other sites

You mean this guy? http://atariage.com/forums/user/1787-pacmanplus/ He uses assembly language (DASM, I think, but not sure) to make most of his games. If assembly is giving you a headache, then you may want to try 7800Basic. As Mord mentioned above, the Basic file is generated into assembly code. There are also samples to get you started.

I think that could be him. It sure looks like it. Wow, he's awesome.

 

So you and Mord are telling me this '7800basic' uses BASIC and changes it to 6502 assembly for you? Well, that sounds very interesting. I will check it out.

Edited by DonavinTheSuperGamer
Link to comment
Share on other sites

7800basic is a good choice and you can make some impressive games with it.Don't feel shy to ask questions as we were all beginners once,it's going to take some patience from you to learn but stick it out and a new world will open up for you.

Edited by OmegaPrime
  • Like 1
Link to comment
Share on other sites

Depends on what you're using. 7800basic can include sprites from png files so long as they have the right palette size. To make the png you can use pretty much any graphics program that'll save png files. If you're doing it by hand, that could be more of a pain since you'll have to figure out how to code the graphics data for the desired screen mode. Some are straightforward, others quite difficult. Also they're stored in rom funny. 7800basic handles all that as it compiles the rom. If you're using 7800basic, start off by just grabbing some sample images from the sample programs and playing with them.

Link to comment
Share on other sites

Thank you, Mord. Now, however, I seem to have a bigger problem on my hands. I am trying to add a font into my game and have added an 80x8 image I created on Microsoft Paint to my game file folder. It contains numbers from 0-9, one every 8x8 pixels. Then I made this Microsoft Notepad file:

Pac-ManXM.bas

Pac-ManXM.bas.a78

Edited by DonavinTheSuperGamer
Link to comment
Share on other sites

You might want to check here on making graphics: http://www.bjars.com/7800.html. Scroll down to "Graphics Tutorial for 7800basic". What I would do is copy an existing image file from the "samples" folder in the 7800basic with the font images, usually in the gfx folder, (such as alphabet_8_wide.png) and edit the letters and numbers. 7800basic recognizes .png and .tmx file formats for graphics and a graphics tool such as Gimp ( a freeware graphics program) is recommended to making and editing graphic files.

Link to comment
Share on other sites

Thank you, Mord. Now, however, I seem to have a bigger problem on my hands. I am trying to add a font into my game and have added an 80x8 image I created on Microsoft Paint to my game file folder. It contains numbers from 0-9, one every 8x8 pixels. Then I made this Microsoft Notepad file:

 

You'll still need to include the png with your font graphics with an incgraphic command.

Link to comment
Share on other sites

Okay. I'm not close to my computer right now so I'll check that later. Just to kill time, I was wondering about the Expansion Module. Seeing the Donkey Kong XM test for the add on baffled me with all of the colors and improved sound quality. I was wondering if that thing is out yet and if there is a way to write code for it on 7800basic.

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