AtariMax EXEPACKER Files with bundled DOS#
About#
The current (Januar 2004) AtariMax Flashcart Software is very well suited for Games, either Disk-Bootable Games or File-Games. But if you try to use Applications from the Flash-Cart, there are some shortcomings:
# if you make a diskimage, you can boot a DOS for the Application, but the Flash-Boot-Software installs a SIO patch. It is not trivial to access a real Floppy drive 1 afer booring from the Flash Cart
# if you use the EXEPACKER Function (wich works like a Gamedos), you don't have a DOS System to load and save data.
So if you like to create a cart with a collection of programming languages, you have to hack the thing :)
I had the challenge that a friend send me an Atari Artist Cart and asked me if I could put the Atari Artist Program into another cartridge. My idea was to put the software into an AtariMax Flashcart, together with another fine graphics programm, Design Master. But both Programs should work with DOS and should be able to load and save pictures.
The Atari Cartridge Specification defines that with Bit 1 and Bit 2 of the Option Register $BFFD/$9FFD CARTFG the Cart can choose whether a Diskboot should happend or not. Unforuntaly the AtariMax Software don't allow to set this behavior.
So I decided to bundle a DOS with with each Application.
Preparing a DOS#
After some testing, I found that OS/A+ 2.0 from OSS is an easy to handle DOS for this task. It is a commandline DOS, so it is not neccessary to work with a DUP .SYS. OS/A+ is very Atari DOS 2.0 compatible (same DOSINI Vector) and can also handle Double Density Disks.
With a Memory Monitor (a 16K BiboMon) a examined where this DOS loaded into memory. OS/A+ 2.0 occupies the memory between $0700 and $1C9F. I dumed this memory portion as a COM-File to disk. Next, a small machine program was appended to the dumped DOS file, taking care of all neccesary initialisation:
- Setting the BOOTFLG to 1 to indicate a successful disk boot
- Setting the DOS Vector $0A
- Set the D: Device Driver entry in the Hander-table HATABS
- Initialize the DOS through HDOSINI
- Setting the DOS Initialistion Vector $0C. This DOSINI Vector is set to the Loader Routine itself so that the loader is resident and survies as reset.
- Call the command line through HDOSVEC
A good Linker or Packer (I used Thorsten Karwoths PowerPacker) will help to assemble the DOS File and the Loader into one file. The resulting file is for a plain OS/A+ DOS loadable from AtariMax Cart.
OS/A+ Loader (Bibo Assembler)#
01000 .LI OFF
01010 *************************
01020 ** DOS OSS/A+ LOADER **
01030 ** (C) 2004 PSC **
01040 ** OSS/A+ 2.00 **
01050 *************************
01060 ;
01070 .OR $2000
01080 .OF D:OSLOAD.COM
01090 ;
01100 ;
01110 BOOTFLG = $09
01120 DOSVEC = $0A
01130 DOSINI = $0C
01140 ;
01170 HDOSVEC = $15B7
01180 HDOSINI = $1540
01190 HDOSTAB = $07CB ; HTABS D:
01200 ;
01210 HATABS = $031A
01220 ;
01230 START
01240 ;
01250 LDA #$01 ; BOOT
01260 STA BOOTFLG ; SUCCESS
01270 ; SET DOS ADDRESS
01280 LDA #HDOSVEC
01290 STA DOSVEC
01300 LDA /HDOSVEC
01310 STA DOSVEC+1
01320 ; SET D: ENTRY
01330 LDX #$F ; OFFSET D:
01340 LDA #$44 ; D
01350 STA HATABS,X
01360 LDA #HDOSTAB
01370 STA HATABS+1,X
01380 LDA /HDOSTAB
01390 STA HATABS+2,X
01400 ; INIT DOS
01410 JSR HDOSINI
01420 LDA #START
01430 STA DOSINI
01440 LDA /START
01450 STA DOSINI+1
01460 ; START DOS SHELL
01470 JSR HDOSVEC
01480 ;
01490 RTS
01500 ------------------------------
Preparing Design Master#
Design Master is already a COM-File that loads from $2800-$7B67 with a start/init address of $79D# Design Master expects to find a already loaded Font (1024 Byte) at $2400.
The Design Master loader is almost identical with the OS/A+ loader, except that as the last step Design Master is called instead of the DOS command line.
The resulting compound file (COM-File) includes:
- OS/A+ DOS COM File $0700-$1C9F
- Design Master Loader $2000-$20xx
- Design Master Font $2400-$27FF
- Design Master COM-File, $2800-$7B67, Init $2000
Design Master Loader (Bibo Assembler)#
01000 .LI OFF
01010 *************************
01020 ** DESIGN MASTER LOADER**
01030 ** (C) 2004 PSC **
01040 ** OSS/A+ 2.00 **
01050 *************************
01060 ;
01070 .OR $2000
01080 .OF D:DMLOAD.COM
01090 ;
01100 ;
01110 BOOTFLG = $09
01120 DOSVEC = $0A
01130 DOSINI = $0C
01140 ;
01150 DMSTART = $79D1
01160 ;
01170 HDOSVEC = $15B7
01180 HDOSINI = $1540
01190 HDOSTAB = $07CB ; HTABS D:
01200 ;
01210 HATABS = $031A
01220 ;
01230 START
01240 ;
01250 LDA #$01 ; BOOT
01260 STA BOOTFLG ; SUCCESS
01270 ; SET DOS ADDRESS
01280 LDA #HDOSVEC
01290 STA DOSVEC
01300 LDA /HDOSVEC
01310 STA DOSVEC+1
01320 ; SET D: ENTRY
01330 LDX #$F ; OFFSET D:
01340 LDA #$44 ; D
01350 STA HATABS,X
01360 LDA #HDOSTAB
01370 STA HATABS+1,X
01380 LDA /HDOSTAB
01390 STA HATABS+2,X
01400 ; INIT DOS
01410 JSR HDOSINI
01420 LDA #START
01430 STA DOSINI
01440 LDA /START
01450 STA DOSINI+1
01460 ; START DESIGNMASTER
01470 JSR DMSTART
01480 ;
01490 RTS
01500 ------------------------------
Preparing Atari Artist#
Bringing Atari Artist into this was a little bit more work. Atari Artist is a 16 K Cartridge. It occupies the space from $8000 to $BFFF. I plugged in the cart, enabled the BiboMon and moved this area to $3000-$6FFF. The Init- and Start-Adresses can be read at $BFFA (Start) and $BFFE (Init).
The loader for Atari Artist has some more work to do:
- set RAMTOP (106, $6a) to $80 (=$8000), and initialize a graphics 0 screen. This is neccessary to move the screen memory and the display list below $8000, else it would be in the same memory area where the program sits.
- Test if this is the initial run, if yes, move the memory from $3000-$6FFF to $8000-$BFFF
- Set the BOOTFLG to 1 to indicate a successful disk boot
- Set the DOS Vector $0A
- Set the D: Device Driver entry in the Hander-table HTABS
- Initialize the DOS through HDOSINI
- Initialize the Atari Artist Program
- Call the Atari Artist Program
The resulting compound file (COM-File) includes:
- OS/A+ DOS COM File $0700-$1C9F
- Atari Artist Program loading to $3000-$6FFF
- Atari artist Loader, $7000-$7096, Init $7000
Atari Artist Loader (Bibo Assembler)#
01000 .LI OFF
01010 *************************
01020 ** ATARI ARTIST LOADER **
01030 ** (C) 2003 PSC **
01040 ** OSS/A+ 2.00 **
01050 *************************
01060 ;
01070 .OR $7000
01080 .OF D:AARTIS3.COM
01090 ;
01100 ;
01110 RAMTOP = $6A
01120 CIOV = $E456
01130 ICCOM = $342
01140 ICBADR = $344
01150 ICAUX1 = $34A
01160 ICAUX2 = $34B
01170 ;
01180 COPN = $03
01190 CCLOSE = $0C
01200 ;
01210 FROM = $D2
01220 TO = $D4
01230 NUM = $D6
01240 ;
01250 BOOTFLG = $09
01260 DOSVEC = $0A
01270 DOSINI = $0C
01280 ;
01290 CARTINIT = $8F48
01300 CARTRUN = $8F5D
01310 ;
01320 HDOSVEC = $15B7
01330 HDOSINI = $1540
01340 HDOSTAB = $07CB ; HTABS D:
01350 ;
01360 HATABS = $031A
01370 ;
01380 START
01390 LDA #$80 ; SAVE MEM
01400 STA RAMTOP ; FOR CART
01410 ;
01420 LDA #0 ; GR.0
01430 JSR GRAFIX
01440 ;
01450 ; TEST IF INITAL RUN
01460 ;
01470 LDA $BFFF
01480 BNE .3
01490 ;
01500 LDA #$30 ; $3000
01510 STA FROM+1
01520 LDA #$80 ; $8000
01530 STA TO+1
01540 LDA #$40 ; $4000
01550 STA NUM
01560 LDA #0
01570 STA FROM
01580 STA TO
01590 ;
01600 TAY
01610 TAX
01620 .1
01630 LDA (FROM),Y
01640 STA (TO),Y
01650 INY
01660 BNE .2
01670 INC FROM+1
01680 INC TO+1
01690 .2
01700 DEX
01710 BNE .1
01720 DEC NUM
01730 BPL .1
01740 ;
01750 LDA #$01 ; BOOT
01760 STA BOOTFLG ; SUCCESS
01770 ; SET DOS ADDRESS
01780 .3 LDA #HDOSVEC
01790 STA DOSVEC
01800 LDA /HDOSVEC
01810 STA DOSVEC+1
01820 LDA #START
01830 STA DOSINI
01840 LDA /START
01850 STA DOSINI+1
01860 ; SET D: ENTRY
01870 LDX #$F ; OFFSET D:
01880 LDA #$44 ; D
01890 STA HATABS,X
01900 LDA #HDOSTAB
01910 STA HATABS+1,X
01920 LDA /HDOSTAB
01930 STA HATABS+2,X
01940 ; INIT DOS
01950 JSR HDOSINI
01960 ; RUN CART
01970 JSR CARTINIT
01980 JSR CARTRUN
01990 ;
02000 RTS
02010 ;
02020 GRAFIX
02030 PHA
02040 LDX #6*$10 ; #6
02050 LDA #CCLOSE
02060 STA ICCOM,X
02070 JSR CIOV ; CLOSE#6
02080 ;
02090 LDX #6*$10
02100 LDA #COPN
02110 STA ICCOM,X
02120 LDA #SNAME
02130 STA ICBADR,X
02140 LDA /SNAME
02150 STA ICBADR+1,X
02160 ;
02170 PLA ; SAVED GR.MODE
02180 STA ICAUX2,X
02190 AND #$F0
02200 EOR #$10
02210 ORA #$0C
02220 STA ICAUX1,X
02230 JSR CIOV
02240 RTS
02250 ;
02260 SNAME .AS "S:"
02270 .HX 9B00
02280 ------------------------------
02290 .OR $02E0
02300 .DA START
02310 ------------------------------
Attachements#
Attached you'll find the AtariMax Flash Image for a Cart with this programs as well as the individual compound files.