Newsgroups: comp.sys.apple2.programmer Path: news.weeg.uiowa.edu!news.uiowa.edu!hobbes.physics.uiowa.edu!math.ohio-state.edu!cyber2.cyberstore.ca!nntp.cs.ubc.ca!alberta!kakwa.ucs.ualberta.ca!acs.ucalgary.ca!sbdocker From: sbdocker@acs.ucalgary.ca (Sean Dockery) Subject: Re: Graphics and ML Message-ID: Date: Tue, 11 Jan 1994 22:37:27 GMT References: <100467@cup.portal.com> Organization: Griffin Software Development Lines: 123 In article dempson@swell.actrix.gen.nz (David Empson) writes: | The best solution is to use a front-end relocator (mover, actually) on | your program to move it elsewhere in memory. Where to move it to | depends on how big it is and what other areas you need. An alternative is the "bootstrap loader" solution. Actually, I prefer this method as it allows the main program to be self-contained. :) The ProDOS .SYSTEM file simply acts as a front end of loading a secondary binary file. Not only that, but in some cases, it allows your program to be loadable from BASIC. The only caveat is that your program code does not violate the Hi-res graphics page (it will likely crash if it does). Consider the following: TYP $FF ORG $2000 PRODOS = $BF00 KBD = $C000 ;KEYBOARD DATA (LATCHED) STROBE = $C010 ;KEYBOARD STROBE START JSR PRODOS DFB $C4 ;GET FILE INFO DA GFIPARM BCS :ERROR LDA GFIPARM+5 ;USE AUX TYPE AS LOADING STA RPARM+2 ; AND EXECUTION ADDRESS STA RUNIT+1 LDA GFIPARM+6 STA RPARM+3 STA RUNIT+2 JSR PRODOS DFB $C8 ;OPEN DA OPARM BCS :ERROR LDA RN1 ;USE SAME FILE REF NUM STA RN2 ; FOR READ/CLOSE CALLS STA RN3 JSR PRODOS DFB $CA ;READ DA RPARM BCS :ERROR JSR PRODOS DFB $CC ;CLOSE DA CPARM BCC RUNIT :ERROR NOP ;PRINT ERROR MESSAGE HERE :WAIT LDA KEYBOARD ;WAIT FOR ACKNOWLEDGEMENT BPL :WAIT STA STROBE LDA #$00 ;CONFIGURE TO CLOSE ALL FILES STA RN3 JSR PRODOS DFB $CC ;CLOSE DA CPARM JSR PRODOS DFB $65 ;QUIT DA QPARM :QERR BCS :QERR ;DON'T EXPECT TO DO THIS BRK ; AND WE SHOULDN'T GET HERE RUNIT JMP $FFFF ;MODIFIED GFIPARM DFB $0A ;10 PARMS DA PATH ;FILE NAME DS 1 ;ACCESS CODE DS 1 ;FILE TYPE :5 DS 2 ;AUX TYPE DS 1 ;STORAGE TYPE DS 2 ;BLOCKS USED DS 2 ;MOD DATE DS 2 ;MOD TIME DS 2 ;CRE DATE DS 2 ;CRE TIME OPARM DFB $03 ;3 PARMS DA PATH ;FILE NAME DA IOBUF ;DUMMY BUFFER RN1 DS 1 ;FILE REFERENCE NUMBER RPARM DFB $04 ;4 PARMS RN2 DFB $00 ;MODIFIED REF NUM DA $0000 ;MODIFIED DATA BUFFER ADR DA $FFFF ;REQUEST TO READ ALL OF IT DS 2 ;TRANSFER COUNT CPARM DFB $01 RN3 DFB $00 ;MODIFIED REF NUM QPARM DFB $04 ;4 PARMS DFB $00 ;STANDARD QUIT CALL PARMS ARE DA $0000 ; RESERVED TO BE ALL ZERO. DFB $00 DA $0000 PATH STR 'MAIN.OBJ' DS \ ;PAD TO PAGE BOUNDARY IOBUF DS 1024 ;1K PRODOS I/O BUFFER The first thing to be done when MAIN.OBJ executes is to clear the Hi-res screen before activating it. I'll leave that as an exercise to the reader. :) -- Sean Dockery | "Tickle us, do we not laugh? dockery@griffin.cuc.ab.ca | Prick us, do we not bleed? sbdocker@acs.ucalgary.ca | Wrong us.. shall we not revenge?"