home *** CD-ROM | disk | FTP | other *** search
- E
- _*********************************************************
- _* *
- _* MODULE NAME : load.asm *
- _* *
- _* mAINTENANCE LOG *
- _* --------------- *
- _* *
- _* DATE TIME ACTION *
- _* ---- ---- ------ *
- _* 25/02/89 02:00 INITIAL CODING *
- _* 29/03/89 19:20 TIDY UP AND FIX *
- _* 03/04/89 22:00 FURTHER TIDY UP *
- _* 03/04/89 23:00 CHANGE BRACKETS, FIX ASS BUGS *
- _* 05/04/89 19:00 FIXED THE PATCHEND BUG *
- _* 06/04/89 23:30 MOVE ZERO DEFNS AND FIX INIT BUG *
- _* 25/04/89 22:30 FIX BUGS, ADDED $FF05-$FFFF COPY *
- _* 29/04/89 9:55 UPDATED PATCH TABLE + OTHER MODS *
- _* 05/05/89 17:50 FIXED THE PAGE AREA BUGS *
- _* 22/05/89 18:05 UPDATED FOR NEW OPTIONS ON LOCSTOR *
- _* 18/06/89 19:00 sYSTEM REGISTERS PLACED ON STACK *
- _* 25/06/89 18:10 sAVE THE STACK POINTER MISSING *
- _* 04/07/89 18:50 PAGE 0 AND 1 CAN BE IN ANY RAM *
- _*********************************************************
-
-
- _*********************************************************
- _* *
- _* ROUTINE : initload - INITIALISE THE LOADER *
- _* BY COPYING IT THEN PATCHING IT *
- _* *
- _* ENTRY *
- _* ----- *
- _* NONE *
- _*.......................................................*
- _* USED *
- _* ---- *
- _* a,x,y *
- _*.......................................................*
- _* EXIT *
- _* ---- *
- _* NONE *
- _*********************************************************
-
-
-
-
- _ EQUATES USED
-
- COPYSTRT= $E000
- RAM0CONF= $3F
- FILENUM= 1
- DEVICE= 8
- SECONDAD= 1
- DEFPRI= 128
- LOADPRG= $F265
- ERRLOAD= $F5B5
-
-
- _ OTHER REQUIRED STORAGE
-
- PRITEXTRES 3
- SAVECNTRES 1
- STKTEMPRES 1_ AREA TO SAVE STACK POINTER
-
- _
- _ sTART OF THE CODE
- _
-
- INITLOADEQU *
- #ZEROADD
- {CBM-P} LDASET_ FOR ldafar
- {CBM-P} STASET_ FOR stafar
- #>COPYSTRT
- {CBM-P} ZEROADD
- #<COPYSTRT
- {CBM-P} ZEROADD+1
- #0
-
- _
- _ COPY THE CODE FROM $E000 TO $FEFF
- _ nOTE THAT AS THIS COULD RUN IN bank 15, IE WITH SYSTEM romS
- _ ENABLED, YOU CAN lda FROM KERNAL rom AND sta INTO ram WITHOUT
- _ HAVING TO CHANGE CONFIGURATIONS. wHEN YOU TRY TO WRITE TO rom
- _ IT ACTUALLY WRITES TO THE ram UNDERNEATH.
- _
-
-
- INITLOD1EQU *
- #$00
- LDAFAR
- #RAM0CONF
- STAFAR
- ZEROADD
- INITLOD1
- ZEROADD+1
- ZEROADD+1
- #$FF
- INITLOD1
-
- _
- _ COPY THE CODE FROM $FF05 - $FFFF
- _
- #5
- INITLOD9EQU *
- #0
- LDAFAR
- #RAM0CONF
- STAFAR
-
- INITLOD9
-
-
- _ CODE COPIED, NOW PATCH IT.
-
- #0
- #0
- PATCHLOPEQU *
- PATCHTAB,X
- {CBM-P} ZEROADD
- PATCHTAB+1,X
- {CBM-P} ZEROADD+1
- PATCHTAB+2,X
- {CBM-A} SAVECNT
- #RAM0CONF
- STAFAR
- SAVECNT
-
-
-
- #PATCHEND
- PATCHLOP
-
- _ CODE NOW PATCHED SO RETURN TO CALLER
-
- {CBM-N}
-
- PATCHTABEQU *
- DB $73,$E5,$EA_ REMOVE sei
- DB $EE,$F3,$EA_ REMOVE sei
- DB $BA,$E5,$EA_ REMOVE cli
- DB $8F,$F4,$EA_ REMOVE cli
- DB $54,$F4,$2C_ REMOVE TEST FOR RUN/STOP
- DB $57,$F4,$4C_ JMP OVER CHECK FOR RUN/STOP FLAG
- DB $58,$F4,$5C
- DB $59,$F4,$F4
- DB $D5,$F2,$4C_ JMP OVER CHECK FOR RUN/STOP FLAG
- DB $D6,$F2,$DA
- DB $D7,$F2,$F2
- DB $21,$F4,$4C_ POINT TO NEW CODE
- DB $22,$F4
- DB >BURSTMOD
- DB $23,$F4
- DB <BURSTMOD
- DB $B0,$F2,$4C_ POINT TO NEW CODE
- DB $B1,$F2
- DB >LOADMOD
- DB $B2,$F2
- DB <LOADMOD
- DB $51,$F4,$F8_ FILE READ TO 248
-
- PATCHEND EQU * - PATCHTAB
-
-
- _*********************************************************
- _* *
- _* ROUTINE : load - THE LOAD ROUTINE. *
- _* CMD FORMAT : l PROGNAME,PRI *
- _* *
- _* ENTRY *
- _* ----- *
- _* charbuff - COMMAND LINE INPUT *
- _* y - POSITION IN THE COMMAND BUFFER *
- _*.......................................................*
- _* USED *
- _* ---- *
- _* a,x,y *
- _*.......................................................*
- _* EXIT *
- _* ---- *
- _* NONE *
- _*********************************************************
-
-
- LOADEQU *
- #PRGNORUN
- DB $2C
- EXECUTEEQU *
- #PRGRUN
- {CBM-P} OPTION
- READLOAD _ READ INFORMATION INTO PRGNAME AND GET PRI
- NOSYNTAX
- {CBM-N}
-
-
- _ oK, WE ARE READY TO LOAD, wE NOW CALL THE PATCHED CODE FOR THE LOADER. fIRST
- _ BY SWITCHING THE BANK TO ram, THEN CALLING THE ROUTINE. tHIS METHOD
- _ SAVES THE PROBLEM OF HAVING TO CODE A FULL LOADER WITH SERIAL ROUTINES
- _ WHICH WOULD HAVE TO BE DONE FOR A FULL OPERATING SYSTEM.
-
- NOSYNTAXEQU *
- LOCFREE_ LOCATE A FREE ENTRY IN THE TABLE
- ALLOK
- #6
- DISPMESS
-
- ALLOKEQU *
- #$3E_ ram BLOCK 0, BUT ALL i/o AVAILABLE
- {CBM-P} CONFREG
-
- _ SETUP FOR THE LOAD ROUTINE
-
- #FILENUM
- {CBM-P} LFN_ lfn
- #DEVICE_ SERIAL DEVICE
- {CBM-P} DEV
- #SECONDAD_ sa
- {CBM-P} SA
- NAMELEN
- {CBM-P} PRGNLEN
- #>PRGNAME
- {CBM-P} PRGNADD
- #<PRGNAME
- {CBM-P} PRGNADD+1
- #0_ BANK NUMBER 0, NOT CONFIGURATION NO.
- {CBM-P} NAMEBANK_ BANK WHERE NAME IS FOUND.
- #$00
- {CBM-P} IOMODE_ STOP ALL OUTPUT FROM SYSTEM
-
- #11
- DISPMESS
- LOADPRG_ CALLS CODE WITHIN THIS SUBROUTINE BLOCK
- NOLODERR
- #9
- DISPMESS
-
- _ PROGRAM NOW IN MEMORY, SO RELOCATE, THEN SETUP TABLE ENTRY
- _ NOTE THE END ADDRESS IS IN x,y AND THE LOAD ROUTINE HAS ALREADY
- _ SET UP SOME PARAMETERS FOR THE RELOCATION.
-
- NOLODERREQU *
- {CBM-A} NEWEND
- {CBM-E} NEWEND+1_ SAVE PROG END ADDRESS
-
- #12
- DISPMESS
- RELOC_ NEWEXEC PASSED BACK NY THIS ROUTINE
- _ AND NEWEND NOT ALTERED
-
- _ TABLE ENTRY SETUP
-
- #FLAG
- OPTION
- {CBM-P} [TABPNTR],Y_ SET MODE OF PROGRAM
-
- _ PUT NAME INTO THE TABLE
-
- #0
- #NAME
- LOADLOP2EQU *
- PRGNAME,X
- {CBM-P} [TABPNTR],Y
-
-
- NAMELEN
- LOADLOP2
- #SPACE
- LOADLOP8EQU *
- {CBM-P} [TABPNTR],Y
-
-
- #MAXLEN
- LOADLOP8
-
- _ SAVE RAM, START AND END ADDRESSES
-
- RAMUSED
- #RAMPRG
- {CBM-P} [TABPNTR],Y
- STARTRAM
- #STRTADD
- {CBM-P} [TABPNTR],Y
-
- STARTRAM+1
- {CBM-P} [TABPNTR],Y
- #ENDADD
- NEWEND_ RELYING ON RELOC NOT CHANGING THEM
- {CBM-P} [TABPNTR],Y
-
- NEWEND+1
- {CBM-P} [TABPNTR],Y
-
- _ SET THE PRIORITY VALUE NOW
-
- PRITEMP
- #PRIORITY
- {CBM-P} [TABPNTR],Y
-
- _ SAVE THE ZERO AND PAGE ONE LOCATIONS
- _ AND PUT PAGE 1 OF NEW PROGRAM AVAILABLE
-
- #ZEROOFF
- ZEROPAGE
- {CBM-P} [TABPNTR],Y
- #RAMPRG
- [TABPNTR],Y
- {CBM-P} PAGE1HI
- #ONEOFF
- PAGEONE
- {CBM-P} [TABPNTR],Y
- {CBM-P} PAGE1LOW
-
-
- _ SET UP THE REGISTER INFO. tHIS COULD BE PASSED BY THE USER OR
- _ AS AN EXPANSION ALLOW FILE SETUP TO DEFINE THE INFORMATION
- _ FIRST THOUGH, THE STACK NEEDS TO BE PRESERVED...
-
- {CBM-H}
- {CBM-A} STKTEMP
-
- #$FF
- {CBM-L}
- NEWEXEC+1
- {CBM-T}
- NEWEXEC
- {CBM-T}
- #0
- {CBM-T}_ STATUS REGISTER
- {CBM-T}_ a
- {CBM-T}_ x
- {CBM-T}_ y
- #RAMPRG
- [TABPNTR],Y
- CONVRAM
- {CBM-T}
-
- _ sAVE THE NEW STACK IN THE TABLE READY TO SIMULATE A RETURN OF INTERRUPT
-
- #REGSP
- {CBM-H}
- {CBM-J}
- {CBM-P} [TABPNTR],Y
-
- _ RESTORE THE OLD PAGE 1
-
- #OSP1HI
- {CBM-P} PAGE1HI
- #OSP1LOW
- {CBM-P} PAGE1LOW
- STKTEMP
- {CBM-L}
-
- OPTION
- #PRGNORUN
- TRYRUN
- {CBM-N}
- TRYRUNEQU *
- LOADRUN
-
- _ READ NAME AND PRIORITY, CONVERT PRIORITY AND STORE IN THE TABLE
-
- READLOADEQU *
- #0
- NAMELOP1EQU *
-
- CHARBUFF,Y_ y POINTS TO NEXT CHAR
- #SPACE
- NAMELOP1
- #COMMA
- GETPRI
- #CR
- ONPRI
- {CBM-A} NAMELEN
- #DEFPRI_ DEFAULT PRIORITY
- {CBM-P} PRITEMP
-
- {CBM-N}
- ONPRIEQU *
- {CBM-P} PRGNAME,X
-
- #16
- NAMELOP1
- #7
- DISPMESS
- {CBM-D}
- {CBM-N}
-
-
- GETPRIEQU *
- {CBM-A} NAMELEN
- #0
- NAMELOP2EQU *
-
- CHARBUFF,Y
- #CR
- TRANSFER
- {CBM-P} PRITEXT,X
-
- #4
- NAMELOP2
- PRIERR
-
- _ CONVERT PRIORITY NOW
-
- TRANSFEREQU *
- {CBM-J}
- #0
- {CBM-A} PRITEMP
- #2
- ONES
- #3
- TENS
- PRITEXT
- CONV
- #3
- PRIERR
- MULT10
- MULT10
- {CBM-P} PRITEMP
-
- TENSEQU *
- PRITEXT,X
- CONV
- MULT10
-
- PRITEMP
- {CBM-P} PRITEMP
-
- ONESEQU *
- PRITEXT,X
- CONV
-
- PRITEMP
- {CBM-P} PRITEMP
-
- {CBM-N}
- PRIERREQU *
- #8
- DISPMESS
- {CBM-D}
- {CBM-N}
-
- _ ABOVE LOGIC COULD NOT COPE WITH 273 OR 259 FOR EXAMPLE.
-
-
-
- _ nOW LOCATE THE MEMORY REQUIRED. (CHECK THE END ADDRESS IN SAVE AND
- _ GET THE CORRECT METHOD FOR CALCULATION OF LENGTH REQUIRED)
-
- _
- _ tHE FOLLOWING CODE IS A MODIFICATION TO THE LOAD ROUTINE TO LOAD IN
- _ EXTRA INFORMATION AND THEN SET UP THE RELOCATION INFORMATION
- _ THE FINAL PART FOR RELOCATION SETUP IS COMPLETED WHEN LOAD IS DONE.
- _
-
-
- LOADMODEQU *
- $E43E
- {CBM-P} OLDADD
- $E43E
- {CBM-P} OLDADD+1_ SET UP FOR RELOCATION
- $E43E
- {CBM-P} OLDEND
- $E43E
- {CBM-P} OLDEND+1
- $E43E
- {CBM-P} EXECADD
- $E43E
- {CBM-P} EXECADD+1
- PROCDATA
- LODERROR
- $F2BA
-
- BURSTMODEQU *
- $F503
- $F4BA
- {CBM-P} OLDADD
- $F503
- $F4BA
- {CBM-P} OLDADD+1
- $F503
- $F4BA
- {CBM-P} OLDEND
- $F503
- $F4BA
- {CBM-P} OLDEND+1
- $F503
- $F4BA
- {CBM-P} EXECADD
- $F503
- $F4BA
- {CBM-P} EXECADD+1
- {CBM-G}
- {CBM-T}
- #$1F
- NOTLAST
- $A5
- {CBM-D}
- {CBM-Q} #4
- {CBM-P} $A5
- NOTLASTEQU *
- PROCDATA
- LODERROR
- $F434
- LODERROREQU *
- {CBM-N}_ RETURN TO THE CALLING LOADER WITH C=1
-
-
- _
- _ nOTE THAT END - START WILL GIVE THE CORRECT LENGTH AS THE END IS ONE
- _ MORE THAN IT SHOULD BE.
- _
-
- PROCDATAEQU *
- OLDEND
- {CBM-D}
- {CBM-Q} OLDADD
- {CBM-P} GIVELEN
- OLDEND+1
- {CBM-Q} OLDADD+1
- {CBM-P} GIVELEN+1
- #NOSTOPT_ NO OPTIONS REQUIRED
- LOCSTOR_ STORAGE LOCATED FOR PROGRAM.
- EXITLOAD
-
- _ sTORAGE LOCATED OK, SO SET UP THE CORRECT LOAD INFORMATION
- _ IE NEW START ADDRESS AND BANK TO LOAD INTO
-
- STARTRAM
- {CBM-P} STARTLO_ SETUP FOR LOAD
- {CBM-P} NEWSTART_ SETUP FOR THE RELOCATION
- STARTRAM+1
- {CBM-P} STARTHI
- {CBM-P} NEWSTART+1
- RAMUSED
- CONVRAM
- {CBM-P} PRGLODBK
- {CBM-P} NEWRAM
-
- _
- _ FIND AREAS FOR PAGE 0 AND PAGE 1. dONE HERE BECAUSE IF YOU CAN'T LOCATE
- _ THE STORAGE, THERE ISN'T ANY POINT CONTINUING THE LOAD.
- _
-
- #0
- {CBM-P} GIVELEN
- #1_ 1 PAGE REQUIRED.
- {CBM-P} GIVELEN+1
- #PAGBOUND_ JUST LOCATE ANY OLD PAGE
- LOCSTOR_ TO STORE THE RAM OF THE PAGES.
- EXITLOAD
- STARTRAM+1
- {CBM-P} ZEROPAGE
- RAMUSED
- {CBM-P} ZERORAM
- #0
- {CBM-P} GIVELEN
- #1_ 1 PAGE REQUIRED.
- {CBM-P} GIVELEN+1
- #PAGBOUND
- LOCSTOR
- EXITLOAD
- STARTRAM+1
- {CBM-P} PAGEONE
- RAMUSED
- {CBM-P} ONERAM
- {CBM-N}
-
- EXITLOAD EQU *
-
- _
- _ cLOSE ALL THE FILES ETC., THIS ROUTINE WILL SET THE CARRY FLAG
- _ AND ISSUE A RETURN WHICH WILL THEN RETURN TO THE CALLER.
- _
-
- ERRLOAD
-
- _
- _ CONVERT A CHARACTER TO A VALUE
- _
-
- CONVEQU *
- {CBM-D}
- {CBM-Q} #50
- {CBM-N}
-
- _
- _ MULTIPLY a BY 10 AND RETURN THE VALUE IN a
- _
-
- mULT10EQU *
-
- {CBM-P} TEMP
-
-
-
-
- TEMP
- {CBM-N}
-
- iend
-
-
-
-
-