-
Content Count
499 -
Joined
-
Last visited
Posts posted by vidak
-
-
The StayFrosty blog posts from SpiceWare are also really useful for teaching you masking.
My project codenamed Sierra Maestra copied the masking concept from StayFrosty, and has a much simpler implementation of it, currently.
Using ROM as a mask is much much faster, and I highly recommend it.
The SkipDraw, FlipDraw, DoDraw and SwitchDraw routines are all many times slower than masking.
-
1
-
-
You should explain how you did it!
-
Also... Send him an email!
My idea about reading his post history doesn't work...
-
1
-
-
This may sound creepy - but you could always look up his forum posting history.
I'm also pretty sure he's in the stella mailing list too...
-
I really appreciate the hard work everyone puts into this community.
The years and years of hard work...
-
2
-
-
Yeah me too.
-
Hm... A release full of new features results into discussing folders only.
That definitely makes me wonder...

I think I may finally have work in the next week or so - so I'll definitely donate some money soon.
The work you're doing is really important, and deserves recognition.
-
1
-
-
Thanks so much for your responses!
Another idea I'm having is to develop some reuseable routines for people to easily copy to allow them to make games in ASM more easily.
The multi-band kernel I have is very easily copied and used, and I think copying and manipulating gauauu's multi-screen overworld could also be presented in a simple way.
I will certainly ask questions when I feel stuck!
I agree that the graphics ROM and the kernel should be in the same bank - I think that's the fastest way. In fact I think that's the only way you can structure the bank switching - any other way would be incredibly and possibly prohibitively complex...
Do you think it is worth me explaining how the multi-screen overworld is implemented in Anguna? If so, would it be better do it in this thread, or on my AtariAge blog?
I wonder if I'm forgetting anything...
===
Anyway, I love how naughty ASM is. It has absolutely no enforced typing whatsoever, so you can, as in Yar's Revenge, make a pointer load /any/ part of the ROM for /any/ purpose. All the naughty tricks that you're able to pull off with the 2600 completely depend on the fact that you almost always program in ASM. It's such a wonderful platform - the hardware is so adaptable and really wants to help you. HMOVE rules can be broken with useful results, etc etc
I knew I really liked the 2600... coming to know it more intimately gives me a lot of satisfaction and fulfillment.-
1
-
-
Okay! I am dedicating some time to the project today.
The next thing I'd like to achieve in the development of the game is to create an overworld map, and have the character Che be able to move around in it. I have been looking at the source code of Anguna (link) to have some idea about how I'd be able to achieve this. Anguna has a 13x13 unit square overworld, and you are able to move from one screen to another.
The rough idea behind implementing an overworld is that you have a table of data describing what the overworld is like, and as your main player character moves off one side of the screen, you manipulate a counter or a pointer so that it points to a different part of the overworld table. I think I can handle this.
I think I will not have enough space in 4KB in order to implement an overworld and the main game mechanic. I will expand the game to 16KB. I think F6 bankswitching will allow me to achieve this. This is how gauauu structures his 4 banks:
BANK 0 - Main Loop Logic, "Preparation" Macros - I assume this is for updating graphics pointers etc.
BANK 1 - main kernel, header graphics kernel, some code related to the third boss, and the graphics ROM
BANK 2 - Header pointer preparation logic and game logic crammed in between the spaces
BANK 3 - password entry, and room background graphics preparation
ram
I take it that the banks are structured in such a way as to best fit all the data in, not necessarily for easily interpreting the structure of the game program.
I have begun learning the programming language Ada for another project I want to work on, and the way gauauu has structured their code into smaller packages agrees with the way coding is meant to be done in Ada. So far I have been compiling a rather large single file. I think I will begin to break my program up into smaller files and make much more use of macros in order to reduce the amount of engineering I have to do. Making the tools do the work is the way Ada pictures the overall development process of software engineering. I will use this philosophy here on out while programming the Sierra Maestra project.
For the next few weeks I will begin a description/explanation of how Anguna implements a multi-screen world that you are able to move through. The licence that gauauu has provided the Anguna source under allows me to do this.
-
I'm of the school that programs should be transparently configurable, too.
...but I use Linux so it's not my problem hahahah
-
-
Thank you so much for your hard work!!
You make homebrew game development so much more logical and straightforward.
-
1
-
-
I feel like it's a collision problem... I can disassemble it and have a look at the code...
-
I think it is an amazing technical feat, but the gameplay is waaaay too hard - I feel like I wanna hack it in order to make it more playable. I think someone above in the thread said someone already has...
-
1
-
-
Could you include some cycle counting in your code?
I think you may be running into timing issues, like tokumaru says...
-
Personally I don't see the point of multiple cores because I love 80s single core technology so much :'D
-
You should check out the Spectre and Meltdown vulnerabilities in all the Intel CPUs since 2006 - hardware and CPUs are just as vulnerable to security exploits as software. The way Intel CPUs have been botched in their construction allows you to hack them at a very low level and get complete control of them.
I agree about clock speeds. The way forward is RISC. We have many cores but very little industry effort put into parallel processing.
Anyway this is getting off topic isn't it... My fault!
Personally I think the PC metaphor is terrible, and the Microsoft/Intel/Apple monopoly is ruining everything hahahab
-
I was born in 1991 - my dad had always used Intel and IBM together. He had an IBM PC with a 8088.
Personally I find the x86 Intel platform ugly and unparsimonious. The design philosophies of the Ataris and the Amigas were much more beautiful.
The reason why we have enormous critical failure points and security weaknesses in Intel CPUs goes right back to the design concepts Intel used in the 70s.
I wish the 68000 had become the ancestor of our CPU hardware because it was a very beautiful design.
I have always hated PCs despite their fame and wide use. The reason they are widely used is not because they're any better but because the effort of training yourself to use a different system is too high.
Microsoft and Apple both rely on the affective familiarity people have with their systems.
Personally, I would like to see more hardware diversity, less monopoly, and more cooperation.
-
OKAY FIXED.
What I am uploading here is the final version for this stage of the game's development!
What I still need to do is:
- Create a network of screens for Che to move through.
- Create the logic for the movement through this world: (i.e. when Che moves off the left side of the screen, he appears on the right side of the next screen to the left of that screen)
- Create movement routines for the peasants and the batista soldiers, maybe simple AI to this effect
- Create graphics for the peasants and the soldiers
- Create graphics for the jungle environment
- Perhaps add more tasks for the kernel, seeing as I am only using 43-44 cycles for the entire kernel. This is only 58% of the maximum cycles needed for the kernel. So I think I may add in playfield graphics.
THEN
- Create the kernel and logic for the "Lock and Load" portion of the game, after I have completed the above portion of the game, the Overwold portion.
-
2
-
-
Okay I have completely fixed up all the pointers - I am basically finished with this stage of development.
The only thing I have to figure out now is why the vertical controls are reversed. I think I can figure this out pretty quickly.
-
OKAY.
It turns out I was decrementing the scanline counter AFTER I was loading the next line of graphics, and not before, when I should have!
The colours of GRP0 are no longer shearing!! -
Okay I have rejigged the kernel. It is now a lot faster, even though it doesn't allow GRP1 to touch the left side of the screen. The whole kernel takes 41 cycles now, instead of 53 cycles.
I am loading the colour table for GRP1 synchronously with the graphics, and this fixes the indexing issues for the colour of GRP1. PROBLEM ONE IS SOLVED.
Here is another improvement: now the colour table for GRP0 is CONSISTENTLY off by one line. This means there must be a static indexing issue.
To the Stella Debugger to see what the problem is!
-
Okay changing the temporary enemy graphics colour table from this:
BatistaSoldierClr ds 15, $00 .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE <- 23 bytes of $FETo this:
BatistaSoldierClr ds 14, $00 .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE .byte $FE <- 24 bytes of $FEFixes the issue. Which leads me to believe that I am right about COLUP1 being written to out of sync.
So instead of doing this in the kernel:
.KernelLoop sta WSYNC lda CheGfxTemp sta GRP0 lda EnvGfxTemp sta GRP1 <kernel code> ... sta COLUP1 ... dec SCANLINE_COUNTER bne .KernelLoopI think I will have to do this:
.KernelLoop sta WSYNC lda CheGfxTemp sta GRP0 lda EnvGfxTemp sta GRP1 lda EnvClrTemp sta COLUP1 <kernel code> ... sta EnvClrTemp ... dec SCANLINE_COUNTER bne .KernelLoopI think this will fix the sync issue, at the cost of a less efficient kernel.
-
Alright it's the weekend here in Sydney, so I have time to work on the game!
I will do a live-update debugging for anyone who is interested. I find this method of debugging is the best for me because I can track EXACTLY what I did after every compile.I have fixed the colouring problem of the enemy characters by manually copying over the graphics pointers from EnvGfxPtr and EnvClrPtr:
lda EnvGfxPtr sta EnvGfxPtr+2 sta EnvGfxPtr+4 sta EnvGfxPtr+6 sta EnvGfxPtr+8 lda EnvGfxPtr+1 sta EnvGfxPtr+3 sta EnvGfxPtr+5 sta EnvGfxPtr+7 sta EnvGfxPtr+9 lda EnvClrPtr sta EnvClrPtr+2 sta EnvClrPtr+4 sta EnvClrPtr+6 sta EnvClrPtr+8 lda EnvClrPtr+1 sta EnvClrPtr+3 sta EnvClrPtr+5 sta EnvClrPtr+7 sta EnvClrPtr+9I can identify two problems:
Number One
The colour of Che seems to shear on the right side of the screen. The graphics shape of GRP0 is correct, but the graphics seem to be applied one line BEFORE they're supposed to on the right side of the screen. I will use the Stella Debugger to have a look at this.
Number Two
This is very confusing. The last line of the GRP1 graphics loads properly, but seems to have the colour $00 applied to it, instead of $FE, like it is supposed to. I checked the Stella debugger, and the colour that is being loaded is definitely $FE, which is bright yellow, but it seems to show up as black. This is very confusing.
My best guess for why this is happening is that I am setting COLUP1 earlier on in the kernel before i WSYNC lower down in the kernel, and then I am drawing GRP1 right after the WSYNC at the top of the kernel. I thought these two TIA register writes were in sync, but maybe the colour for GRP1 is being written again after I have drawn it.
As always, if there are any people reading this before I update again, feel free to jump in and give your opinions.

p0 on same scanline as m0, nudges it up or down slightly.
in Atari 2600 Programming
Posted
Yeah! My latest source code of my Sierra Maestra game!
I have all the pointers set up properly, and you can read through my debugging.
I'm always here to help!