goldste@uthub.UUCP (Jack Goldstein) (02/15/86)
There has been a lot of talk in this group lately about assembly language programming and posting public domain apple sources. I thought I'd combine the two topics with this posting. The first file in this article contains a number of constant definitions (equates) for assembly language programming on an Apple II+. It includes some character constants, most of the zero page variables, many of the useful ROM routines and all the page 3 vectors. It is most useful if your assembler has an include feature, especially if you have a RAM disk. One noteable omission from this file is that none of the on-board I/O locations are present. Perhaps someone can add them and repost. The second file contains constant definitions for programming with DOS 3.3. It contains most of the constants related to the File Manager and RWTS and many DOS variables. This is not a shell archive. You have to extract the files manually. -------------- cut here for system.inc ------------------------------ * SYSTEM DEFINITIONS * ****************** * Written by Jack Goldstein February, 1986 * This file contains a number of constant definitions which may be * useful when programming an Apple ][. It was written for an * Apple ][+ so a few things may have to be changed for the 2e. * * Character constants * cntrlC .eq $83 bell .eq $87 bksp .eq $88 tab .eq $89 LF .eq $8a FF .eq $8c CR .eq $8d cntrlQ .eq $91 cntrlS .eq $93 cntrlX .eq $98 ESC .eq $9B space .eq $A0 caseBit .eq $20 * * Zero Page Variables * Most of the monitor variables, except for the screen control ones, * are overwritten by DOS. * loc0 .eq $0 loc1 .eq $1 wndLft .eq $20 wndWdth .eq $21 wndTop .eq $22 wndBtm .eq $23 CH .eq $24 horizontal cursor position CV .eq $25 vertical " " baseAddr .eq $28 base addr of current output line baseAddr2 .eq $2A base addr of line for ESC-edit invFlag .eq $32 bits AND'd with every char out prompt .eq $33 CSW .eq $36 char out switch KSW .eq $38 keyboard input switch regPC .eq $3A Saved user register A1 .eq $3C A2 .eq $3E A3 .eq $40 A4 .eq $42 A5 .eq $44 regA .eq $45 Saved user registers regX .eq 46 regY .eq $47 regStat .eq $48 regSP .eq $49 random .eq $4A apProgStart .eq $67 apVarStart .eq $69 apHimem .eq $73 apHighLineNum .eq $76 one byte apProgEnd .eq $AF lineBuf .eq $200 GetLn buffer * * Monitor subroutines * * Standard input and output Mon.COut .eq $FDED Mon.CROut .eq $FD8E Mon.Bell .eq $FF3A Mon.PrHex .eq $FDE3 Mon.PrByte .eq $FDDA Mon.PrntAX .eq $F941 Mon.PrntYX .eq $F940 Mon.PrBlnk .eq $F948 Print 3 blanks Mon.PrBl2 .eq $F94A Print X blanks Mon.PrErr .eq $FF2D Mon.RdKey .eq $FD0C Standard input Mon.GetLn .eq $FD6A Mon.GetLnZ .eq $FD67 CR then GETLN Mon.GetLn2 .eq $FD6F GetLn without printing prompt * Screen Control for 40 Column Text Mon.COut1 .eq $FDF0 Char in A to screen Mon.KeyIn .eq $FD1B Apple keyboard Mon.SetInv .eq $FE80 Mon.SetNorm .eq $FE84 Mon.Init .eq $FB2F init 40 column text window Mon.SetTxt .eq $FB39 Mon.SetGr .eq $FB40 Mon.SetWnd .eq $FB4B Mon.BasCalc .eq $FBC1 Mon.VTab .eq $FC22 Mon.ClrEOP .eq $FC42 Mon.Home .eq $FC58 Mon.Scroll .eq $FC70 Mon.ClrEOL .eq $FC9C * Setting I/O Vectors Mon.SetKbd .eq $FE89 set normal keyboard input Mon.SetVid .eq $FE93 set normal 40 column output Mon.InPort .eq $FE8B set input to slot A Mon.OutPort .eq $FE95 set output to slot A * General Utilities Mon.Entry .eq $FF69 Monitor entry point Mon.GetNum .eq $FFA7 Decode hexnum from inBuf to A1,A2 Mon.Wait .eq $FCA8 wait .5 * (26 + 27A +5A^2) mu-secs Mon.Save .eq $FF4A Save user regs Mon.Restore .eq $FF3F Restore user regs Mon.OldBrk .eq $FA59 old break Mon.Move .eq $FE2C Move (A1 to A2) to A4 Mon.Vfy .eq $FE36 Verify (A1 to A2) with A4 * * Page 3 Routines and Vectors * WarmStart .eq $3d0 ColdStart .eq $3d3 Dos.FileMan .eq $3d6 Dos.RWTS .eq $3d9 Dos.LocFileParm .eq $3dc Dos.LocIOB .eq $3e3 Dos.ConnectIO .eq $3ea Connect DOS IO intercepts Break .eq $3ef ResetAddr .eq $3f2 PowerUpByte .eq $3f4 ApSoftUsrRtn .eq $3f5 & MonitorUsrRtn .eq $3f8 ^Y NMIUsrRtn .eq $3fb IntrptRtnAddr .eq $3fe * * RAM Card I/O Locations * RAM2RdRamWrtRom .eq $C080 RAM2RdRomWrtRam .eq $C081 RAM2RdRomWrtRom .eq $C082 RAM2RdRamWrtRam .eq $C083 RAM1RdRamWrtRom .eq $C088 RAM1RdRomWrtRam .eq $C089 RAM1RdRomWrtRom .eq $C08A RAM1RdRamWrtRam .eq $C08B ------------------------ cut here for dos.inc --------------------------- * DOS CONSTANTS AND VARIABLES * *************************** * Written by Jack Goldstein, February, 1986 * This file contains a number of constants which may be useful when * programming an Apple with DOS 3.3. * * CONSTANTS * * File Types tText .eq $00 tIntBasic .eq $01 tApSoft .eq $02 tBinary .eq $04 tRelocatable .eq $08 tSType .eq $10 * * R W T S * '*' marks those fields to be changed; '+' marks those to be read * * IOB iTabType .eq $0 always 1 iSlot16 .eq $1 iDrive .eq $2 * iVolume .eq $3 * 0 matches any vol iTrack .eq $4 * iSector .eq $5 * iDevTab .eq $6 iDataBufLoc .eq $8 * iByteCount .eq $B iCommand .eq $C * iReturnCode .eq $D + carry set on rtrn if non-zero iPrevVolume .eq $E iPrevSlot16 .eq $F iPrevDrive .eq $10 * Command Codes cSeek .eq $0 cRead .eq $1 cWrite .eq $2 cFormat .eq $4 * Return codes rNoError .eq $0 rInitErr .eq $08 rWriteProt .eq $10 rBadVol .eq $20 rDriveErr .eq $40 * * The File Manager * * Parameter List pCallType .eq $0 pSubCallType .eq $1 pRecord .eq $2 pFileType .eq $7 for open pFileNameAddr .eq $8 pReturnCode .eq $A pScratchBuf .eq $C 45 byte scratch buffer pDataBuffer .eq $10 256 bytes * Call type codes fOpen .eq $1 fClose .eq $2 fRead .eq $3 fWrite .eq $4 fDelete .eq $5 fCatalog .eq $6 fLock .eq $7 fUnlock .eq $8 fRename .eq $9 fPosition .eq $A fInit .eq $B fVerify .eq $C * Sub-call Codes sOneByte .eq $1 sRange .eq $2 sPosOneByte .eq $3 sPosRange .eq $4 * Return Codes - carry is set on return if non-zero return code eNoError .eq $0 eBadCall .eq $2 eBadSubCall .eq $3 eWriteProt .eq $4 eEndOfData .eq $5 eFileNotFound .eq $6 eBadVol .eq $7 eDiskErr .eq $8 eDiskFull .eq $9 eFileLocked .eq $A * Other errors eSyntaxError .eq $B eNoBuffers .eq $C eWrongFileType .eq $D eTooLarge .eq $E * DOS buffer formt bDataBuf .eq $0 bTSList .eq $100 bWorkArea .eq $200 bFileName .eq $22D bLink .eq $251 fileNameSize .eq bLink-bFileName * * ZERO PAGE VARIABLES * IOBLoc .eq $48 * * DOS VARIABLES * Dos.firstBuf .eq $9D00 Dos.kbdIntRtn .eq $9D02 keyboard intercept routine Dos.vidIntRtn .eq $9D04 video " " Dos.cmdEntryTab .eq $9D1E Dos.actBasVect .eq $9D56 active BASIC vector table Dos.BasChain .eq $9D56 Dos.BasRun .eq $9D58 Dos.BasErrHand .eq $9D5A Dos.BasColdStrt .eq $9D5C Dos.BasWarmStrt .eq $9D5E Dos.BasReloc .eq $9D60 Dos.IntBasVect .eq $9D62 Dos.Ap1BasVect .eq $9D6C ROM Applesoft Dos.Ap2BasVect .eq $9D78 RAM Applesoft Dos.MaxDrives .eq $A95B Dos.errorMsgs .eq $A971 Dos.errorIndex .eq $AA3F Dos.curStatus .eq $AA51 Dos.CSW .eq $AA53 Dos.KSW .eq $AA55 Dos.maxFiles .eq $AA57 Dos.MONFlags .eq $AA5E Dos.ExecActFlag .eq $AAB3 Dos.ActiveBasic .eq $AAB6 * Status constants sRead .eq $01 sWarmstart .eq $00 sColdstart .eq $08 sApSoftRam .eq $40 * MON constants mC .eq $40 mI .eq $20 mO .eq $10 * Active Basic Constants bInteger .eq $00 bApsoftRom .eq $40 bApsoftRam .eq $80