Search the Community
Showing results for tags 'Z80 Programming'.
Found 3 results
This is an expanded post about the General Video Assembler for the Bally Arcade/Astrocade. A just posted a much shorter version of this to the Bally Alley Yahoo Group. I was going to make a "quick" video review of the Centipede clone, Sneaky Snake. This is the main game cartridge that we're currently playing in the Astrocade High Score Club. It's a 4K game. I wanted to give some background for the game, so I looked into how it was programmed. It was created entirely using an Astrocade with expansion RAM: the source code was created and assembled using the General Video Assembler, a program that was available on tape. Even the Sneak Snake EPROMs were burned using an Astrocade . This intrigued me, so I skimmed the General Video Assembler manual... and then spent some time updating the Dave Ibach area on BallyAlley.com. Silly, Adam, now I probably won't have time to make a video for Sneaky Snake to get bonus points in the Astrocade HSC. Ah, well... You can read the updated description of the General Video Assembler here: http://www.ballyalley.com/tape_manuals/dave_ibach/dave_ibach.html#GeneralVideoAssemblerDocs This is an extended version of what's in the above link (minus the link to the manual): General Video Assembler. By General Video (Steve Walter and Dave Ibach). Arcadian 4, no. 12 (Oct. 07, 1982): 123. (First Advertisement) Arcadian 5, no. 4 (Feb. 18, 1983): 57. (Review) Requires: "AstroBASIC" and a minimum of 4K add-On RAM expansion. This machine language assembler cost $35. Here is an overview of it from an ad in the October 1982 Arcadian: Speak to your Astrocade in its native language! Uses standard Z80 mnemonics Has complete editing facilities Prints extensive error messages Provides symbolic access to BASIC's variables Create object programs of unlimited size Requires Astrovision BASIC with taping facility and 4K (minimum) of add-on memory switchable between 6K and 2K address ranges (like Blue Ram) The tape that this assembler was released on looks like this: Side 1: Side 2: The General Video Assembler is made-up of four programs: Collector, Pass I, Pass II and Text Editor. Also included are two sample programs: Flying Witch, and Logo. The software can be downloaded here: http://www.ballyalley.com/program_downloads/ram_expansion_required/programs_a-h/programs_a-h.html#GeneralVideoAssemblerXB This assembler actually required a keypad overlay that looked like this: This 16-page manual is quite extensive. Here is the complete first page from the manual. It gives the user an indication of what the program can do on the Astrocade. Provided in this manual is a comprehensive description of the General Video Assembler for the Z80-based Astrocade. The General Video Assembler includes an editor for preparation of the source program, Pass I and Pass II which translate Z8O source statements into hexadecimal, and the Collector for joining together multiple segments. An assembler is different from [an interpreter]. Your Astrocade BASIC is [an interpreter]. It can execute a BASIC program directly by a RUN command, translating each BASIC statement before executing it. Consequently a BASIC [interpreter] is very convenient, but also very slow in execution since every statement must be translated before execution. With an assembler, the source program cannot simply be RUN. It must first be assembled. This is a one-time process, converting source statements to hexadecimal, and is completely finished by the time the object program is CALLed. A change in the source program requires a new assembly. Since no translation goes on during execution, the speed is greatly increased. It is not the purpose of this manual to teach Z8O machine coding. If you have experience with other assembler languages and understand hexadecimal, and need only a familiarity with the processor architecture and instructions, then you can get by with the Z80 Instruction Handbook by Nat Wadsworth (SCELBI Publications, 1978, about $6). Otherwise, get a more comprehensive textbook, like Programming the Z80 by Rodney Zaks (Sybex, 1980, about $12). Hardware Required An Astrocade game computer, Astrocade BASIC with taping facilities and add-on memory is required. The add-on memory must be at least 4K (hex) in size and it must be switch able from the 2K (hex) to the 6K (hex) address ranges (like the Blue RAM or Viper). Since there is no floppy disk capability, all intermediate files must be recorded on tape. Thus tape handling can be excessive at times, in spite of operational streamlining. This is true in particular of multi-segment programs. To facilitate this, the user is strongly urged to install an I/O switch for switching between input and output taping. Steve Walters explained how to do this in Arcadian 4, no. 2 (Dec. 07, 1981): 16. It's hard for me to believe that a Z80 assembler exists for the Astrocade; that's just crazy to me. According to the Paul's interview with Dave Ibach, about 100 copies of the program were sold; more than I would expect in the little Astrocade community. The full interview with Dave Ibach is here: http://www.ballyalley.com/ballyalley/interviews/interview_with_david_ibach.txt Has anyone here used this assembler besides Paul? I haven't used it, but revisiting the documentation makes me want to try it out. Maybe I'll make a video of me using the General Video Assembler; now that would bore some folks to death! Adam
I don't know if I'll have more MAME debugger examples, but if I do, then I'll post them here. Over the last few days, I've been disassembling the 4K ROM of Bally Pin (aka Astrocade Pinball). Today while disassembling Bally Pin, I found the table that holds the six "scores" (sound effects) that are called by BMUSIC (a subroutine that you can read about in the "Nutting Manual"). Here is the source code for that table that I created (note that L stand for Label here, so L2F7A means that a score is at $2F7A on the cartridge): ; Music Score Table ?? L2F6E: DW L2F7A DW L2FE6 DW L2FA3 DW L2FB8 DW L2FC2 DW L2FCA Each score is called by the BMUSIC routine, which resides at ROM location $2F67 on the Bally Pin cartridge. I set a MAME debugger breakpoint at $2F67. This allowed me to check what was going on with various registers when BMUSIC is called. I needed to know the values of HL, A and IX. This worked okay, but was a little clumsy. I wondered how to set a breakpoint only when HL was a certain value. I looked online, but I couldn't find exactly what I was looking for exactly. Through trial and error, I discovered that I could stop Bally Pin's execution when the BMUSIC routine was called and one certain score was called. Here's how I did this in MAME's debugger: BPSET $2F67,HL == $2FC2 This allowed me to figure-out that the "score" at $2FC2 is the one of the two sounds that the spinner makes as it goes round and round. MAME's debugger is sweet! It's too bad that the documentation for it is sparse. You sort of need to know how to use it before you start using it, which is intimidating. Adam
Last week I began to disassemble the 4KB, 1979 pinball game for the Astrocade called Bally Pin. The game looks like this: Today I've reached a point where it's worth sharing. You can download it here: http://www.ballyalley.com/ml/ml_source/ml_source.html#BallyPinDisassembly Most of the ROM can be seen in Z80 mnemonics now. Sure, it's hard to follow, but it beats reading hexadecimal! This code can be assembled using the Zmac assembler and the Home Video Game Library (HVGLIB.H), which are both available here: http://www.ballyalley.com/ml/ml_tools/ml_tools.html I became interested in disassembling this game in May of 2016 when we played Bally Pin in the Astrocade High Score Club, here: http://atariage.com/forums/topic/252219-hsc01-round-7-bally-pin-pinball/ The game's manual looks like this: The game cartridge looks like this: I'm learning to use the MAME debugger a little better, which makes disassembling the game go a bit faster. Most of the ROM has been disassembled, but I have not started to follow the game's logic yet. Although, to a certain extent that isn't true, for it's impossible to disassemble a game without following the logic a little bit. Today I disassembled the music "scores" used by the on-board ROM's music routines. By "score" and music, we're actually talking about sound effects. I hope that tomorrow I can start looking into the graphics of the game. I'd also like to see if I can follow how the game gets laid out. If possible, I'd like to add a few well-placed pixels so that the ball doesn't drain. It would be cheating, sure, but it would make disassembling the game go faster, as I have been playing the game without mixed results. If I can't prevent the ball from draining, then maybe I can at least add more default balls when the game begins. As progress continues, I'll post the disassembled source code to BallyAlley.com and mention it here. Adam