ÈITCHÈIKER'S ÇUIDE ÔO ÇEOÐROGRAMMER Ö2.0 ---------------------------------------- ÔHIS DOCUMENT CONTAINS A COLLECTION OF WORKING DOCUMENTS CONCERNING GEOÐROGRAMMER Ö2.0. ÁS THERE IS NO USER'S MANUAL, THESE FILES WILL HAVE TO SUFFICE FOR NEW USERS. ÅRIC Å. ÄEL ÓESTO, ÄECEMBER 1990. ÇENERAL: FEATURESÖ2 ÒÏÕÎÄ1 ÖÅÒÓÉÏÎÓ ÖÅÒÓÔÁÔÓ ÕÐÇÒÁÄÅ_ÔÏ_Ö2 ÔÏÄÏ ÇEOÁSSEMBLER: GEOÁSSEMÔÏÄÏ ÇEOÌINKER: GEOÌINKÔÏÄÏ ÇEOÄEBUGGER: GEOÄEBUGÔÏÄÏ GEOÄEBUGÓPECSÒÅÁÄÍÅ ÉNITÆORÉÏÂUG ÒÅÕÎOTES ÒÅÕBUGS APPÔYPES MEMÐROTECT CBMÁPPS HIDEÍODE INTERRUPTS NMI RBOOT×ARN VIEWÃOMMAND ENVIRONMENT WISHÌIST NEW: GEOÁSSEMBLER, GEOÌINKER, AND GEOÄEBUGGER TAKE FULL ADVANTAGE OF EXTRA MEMORY AND 2 ÍÈÚ PROCESSOR SPEED OF ÃOMMODORE 128 AND 128Ä COMPUTERS. ÎOW: FASTER AND MORE MEMORY-EFFICIENT! ÇEOÐROGRAMMER ÉMPROVEMENTS ÉN ÖERSION 2.0 ÇEOÁSSEMBLER: ONE PROGRAM RUNS UNDER ÇÅÏÓ 64 ÁÎÄ ÇÅÏÓ 128 (80 COLUMN ONLY ON 128) FILE SELECTION Ä SCROLLS FASTER AND HOLDS 40 FILENAMES SYMBOL TABLE SIZE: Ã64 MODE Ã128 MODE 3210 MACRO TABLE SIZE: Ã64 MODE Ã128 MODE XXX NAMES, XXX CHARS 389 NAMES, 8000 CHARS OBJECT CODE SIZE LIMIT: Ã64 MODE Ã128 MODE XXX BYTES 7999 BYTES NEW ERROR MESSAGES: "TOO MANY LOCAL LABEL REFERENCES" "PHASE ERROR IN VALUE" "PHASE ERROR IN FLAG" "SYNTAX ERROR" ("TOO MANY LOCAL LABELS" CHANGED TO "TOO MANY LOCAL LABEL DEFINITIONS") HAS .TEXT DIRECTIVE TO ASSEMBLE ASCII INTO ÃÂÍ TEXT CODES. ENDING Ä HAS ICON TO RUN THE LINKER ÇEOÌINKER: ONE PROGRAM RUNS UNDER ÇÅÏÓ 64 ÁÎÄ ÇÅÏÓ 128 (80 COLUMN ONLY ON 128) FILE SELECTION Ä SCROLLS FASTER AND HOLDS 40 FILENAMES ÖÌÉÒ LINKS: UP TO 21 MODULES (RESIDENT + 20 OVERLAY) ALLOWS UP TO 20 .REL FILES PER MODULE (OR TOTAL IN ÓÅÑ LINK) SYMBOLS: Ã64 MODE Ã128 MODE ÓÅÑ / ÃÂÍ APPLICATIONS: X X ÖÌÉÒ APPLICATIONS: X X RESIDENT MODULE: X 3185 SWAP MODULE: X 1375 OBJECT CODE SIZE LIMIT: Ã64 MODE Ã128 MODE XXX BYTES 7999 BYTES NEW ERROR MESSAGES: "TOO MANY ERRORS" "ILLEGAL FILE NAME" "TOO MANY FILES IN A MODULE" ENDING Ä HAS ICON TO RUN THE DEBUGGER ÇEOÄEBUGGER: ONE PROGRAM RUNS UNDER ÇÅÏÓ 64 ÁÎÄ ÇÅÏÓ 128 SEE SUB-AREAS BELOW FOR NOTED DIFFERENCES BETWEEN MACHINES SYMBOLS: Ã64 MODE Ã128 MODE ÓÅÑ / ÃÂÍ APPLICATIONS: ÖÌÉÒ APPLICATIONS: RESIDENT MODULE: SWAP MODULE: ÓUPERÄEBUGGER (IN ÒÅÕ) NOW OFFERS 800 SYMBOLS AND 1Ë OF MACRO DEFINITIONS. 128 MODE HAS NEW "ÂACKÒAM ÓUPERÄEBUGGER", WHICH HIDES IN ÂACKÒAM. ÕSER CAN WRITE FULL-SIZED APPLICATIONS IN ÆRONTÒAM. ÃAN HANDLE 1000 SYMBOLS AND 1Ë OF MACRO DEFINITIONS. ** ÔHIS NEW 20Ë DEBUGGER DOES NOW INCREASE SIZE OF ÇEOÄEBUGGER: THERE IS A DIFFERENTIAL LOADER SCHEME WHICH LOADS IN THE SUPER DEBUGGER AND THEN RELOCATES THE CODE FOR EITHER THE ÒÅÕ OR ÂACKÒAM. NO ÇÅÏÓ SCREEN ASSUMPTIONS: DISPLAYS DEBUG INFORMATION ON 40-COLUMN SCREEN, AND RETURNS TO WHATEVER SCREEN (AND SCREEN MODE) WAS IN USE WHEN RUNNING USER CODE, OR WHEN Æ7 IS PRESSED SEE BELOW ABOUT DEBUGGER'S SHADOW VARS FOR ÖÉà PARAMETERS NEW AND IMPROVED MEMORY READ/WRITE ROUTINE: ÉNTERCEPTS (AND REDIRECTS TO DEBUGGER SHADOW VARIABLES) READS AND WRITES TO: $0000 AND $0001 (REGISTERS WHICH CONTROL MEMORY MAP) AREA OF ZERO PAGE WHICH IS USED BY DEBUGGER MEMORY AREAS USED BY ÒÅÕ ÓUPERÄEBUGGER (REDIRECTS TO USER MEMORY SWAP AREA IN BANK #0 OF ÒÅÕ) SEVERAL ÖÉà CHIP REGISTERS, INCLUDING $ÄÄ00 (CIA2ÂASE), WHICH CONTROLS ÖÉà MEMORY MAP ON 128: $Ä500-$Ä50Á (MEMORY MANAGMENT UNIT) $ÆÆ00-$ÆÆ04 (MORE MMU REGISTERS) $Ä030 (1ÍÈÚ/2ÍÈÚ SWITCH) ÄISALLOWS READS AND WRITES TO: ALL ÒÏÍ AREAS (SO NO BLEED THROUGH TO ÒÁÍ OCCURS) ANY AREA WHERE DEBUGGER CODE OR SYMBOLS ARE STORED (5 DIFFERENT CASES HERE, DUE TO 3 DEBUGGER TYPES ON 2 MACHINES.) STACK AREA BELOW CURRENT ÓÐ (DEBUGGER IS USING) PAGE 3 ÉÒÑ/ÂÒË/ÎÍÉ VECTORS USED BY ÒÏÍS $ÆÆÆ9 AREA ÉÒÑ/ÂÒË/ÎÍÉ VECTORS RAM EXPANSION UNIT'S ÄÍÁ CONTROLLER, IF USING ÒÅÕ ÓUPERÄEBUGGER "CTAB" - EXTERNAL 1ËX4 ÒÁÍ USED BY ÖÉà CHIP IN TEXT MODE. ÏN 128, THERE ARE TWO OF THESE. ÄEBUGGER USES CTAB #1, AND PREVENTS Ò/× TO IT. ÕSER IS FREE TO USE CTAB #0. ×HEN ACCESSING ÒÁÍ IN 128 MODE, CALCULATES EFFECTIVE ADDRESS, TAKING BANK NUMBER AND BANK SHARING STATUS INTO ACCOUNT. ÎEW AND IMPROVED CONTEXT SWITCH (SECTION OF CODE WHICH BRIDGES GAP BETWEEN DEBUGGER AND USER CODE): TRAPS INTERRUPTS WHICH OCCUR WHEN USER'S APPLICATION SWAPS ÒÏÍ IN WITHOUT DISABLING INTERRUPTS; WARNS USER THROUGH DEBUGGER MESSAGE. ON 128 SYSTEM: HANDLES BANK-TO-BANK SWITCHING REQUIRED TO GET FROM EITHER BANK TO ONE OF 3 DEBUGGERS. SAVES AND RESTORES PROCESSOR CLOCK SPEED 1ÍÈÚ / 2ÍÈÚ * ÉMPROVED ÇET / ÐUT COMMAND: WORKS WITH 1571 AND 1581 DRIVES. * ÄISASSEMBLES AND TOP-STEPS THROUGH IN-LINE CALLS TO ÇÅÏÓ CORRECTLY. ÕSER CAN DISABLE THIS OPTION. * DISPLAYS ÃÐÕ_ÄÁÔÁ ($0001) OR ÃONFIG ($ÆÆ00) AS PRIMARY MEMORY MAP REGISTER IN 64 AND 128 MODES RESPECTIVELY. ÔHIS AFFECTS THE "Ò" REGISTER DISPLAY COMMAND AND THE "ÒÅÇ" REGISTER DISPLAY/MODIFY COMMAND. ÍORE ERROR CHECKING DURING FILE LOADS, WITH INFORMATIVE DIALOG BOXES: EXTENSIVE ERROR CHECKS AND GOOD ERROR DIALOG BOXES FOR: DEBUGGER MODULE SWAPS USER APPLICATION LOADS MACRO FILE LOADS SYMBOL FILE LOADS DISPLAYS INFORMATIVE ERROR DIALOG BOX FOR FORMAT ERRORS IN GEO×RITE MACRO DEFINITION FILES. ÄISPLAYS FILENAME, ERROR MESSAGE, PAGE AND LINE NUMBER. CAN DEBUG APPLICATIONS WHICH TRASH ÇÅÏÓ APPLICATION MUST HANDLE LOADING ITS OWN CODE IN OVER ÇÅÏÓ AREAS APPLICATION MUST DISABLE INTERRUPTS OR SET UP ITS OWN INTERRUPT SERVICE ROUTINE. ×ILL HAVE TO BE CLEVER TO PLACE HIS INTERRUPT VECTOR IN $334 AREA WHEN HIS APPLICATION IS RUNNING UNDER THE DEBUGGER. (É WILL SUPPLY THIS CODE IN THE NEW SAMPLE APP.) ÕNSEEN COMPLICATIONS WHICH ARE HANDLED: BANK SWITCH CONCERNS DURING: CONTEXT SWITCH ÊÓÒ COMMAND ÇET / ÐUT COMMANDS RBOOT MAINTAINING SOFTWARE BREAKPOINTS SINGLE STEP BREAKPOINT ÁND ALL BUGS HAVE BEEN FIXED! ÓAMPLE ÆILES: ÇÅÏÐÒÏÇÒÁÍÍÅÒ Ö2.0 ÂÅÔÁ ÔÅÓÔ ÒÏÕÎÄ #1 ÊULY 29, 1988 *** ÐÌÅÁÓÅ ÒÅÁÄ ÔÈÉÓ ÂÅÆÏÒÅ ÙÏÕ ÉÎÓÔÁÌÌ ÔÈÅ ÄÉÓË *** ÃONGRATULATIONS ON BEING SELECTED AS A TESTER FOR GEOÐROGRAMMER Ö2.0 ! ÂECAUSE GEOÐROGRAMMER IS SUCH A COMPLEX PRODUCT, AND BECAUSE WE WANT TO MAKE SURE IT IS 100% BUG-FREE WHEN WE START SHIPPING IT, WE HAVE DECIDED TO PUT GEOÐROGRAMMER Ö2.0 THROUGH TWO ROUNDS OF ÂETA ÔESTING. ÔHIS IS ROUND ONE. ÉN THIS PACKAGE YOU WILL FIND YOUR GEOÐROGRAMMER Ö2.0 DISK, AND SOME QUICK NOTES ABOUT DIFFERENCES FROM VERSIONS Ö1.0 AND Ö1.1. ÕNFORTUNATELY, WE HAVE NOT HAD THE TIME TO FULLY TEST GEOÌINKER, AND WE HAVE NOT YET COMPLETED UPGRADING THE COLLECTION OF SAMPLE FILES TO ÇÅÏÓ Ö2.0 LEVEL. ÔHEREFORE, DO NOT BE CONCERNED IF YOU ENCOUNTER SEVERAL BUGS IN GEOÌINKER. ÊUST LET ME KNOW BY FILLING OUT ONE OF THE ENCLOSED ÂUG ÒEPORT FORMS, AND SENDING THE FORM BACK (ALONG WITH SOURCE FILES IF REQUIRED) TO ÂERKELEY ÓOFTWORKS AS SOON AS POSSIBLE. ÏVER THE NEXT THREE TO FOUR WEEKS WE WILL PUT THE FINISHING TOUCHES ON THE PRODUCT, WILL FIX ANY BUGS THAT YOU FIND, AND WILL DO MORE IN-HOUSE TESTING. ×E WILL THEN SEND YOU A GEOÐROGRAMMER Ö2.0 ÂÅÔÁ 2 DISK, AND ROUND TWO WILL HAVE BEGUN. ×E EXPECT THE ENTIRE ÂETA ÔEST PERIOD (ROUNDS ONE AND TWO) TO LAST FIVE TO SIX WEEKS. ×E DO NOT YET HAVE A DRAFT OF THE GEOÐROGRAMMER Ö2.0 ÕSER'S ÍANUAL ÁDDENDUM TO SEND YOU, SO THE INFORMATION ON THE FOLLOWING PAGES WILL HAVE TO SUFFICE FOR THE NEXT FEW WEEKS. ÆROM A USER-INTERFACE STANDPOINT, THERE ARE FEW DIFFERENCES BETWEEN VERSIONS 1.0 AND 2.0, SO IF YOU HAVE NEVER USED THE PRODUCT BEFORE, YOU CAN FOLLOW THE INSTRUCTIONS IN THAT TEXT. ÉF YOU HAVE BEEN USING GEOÐROGRAMMER Ö1.0 OR Ö1.1 FOR SOME TIME, PLEASE BE SURE TO TRY ASSEMBLING AND LINKING AND SOURCE FILES YOU'VE ALREADY WRITTEN. ÉÍÐÏÒÔÁÎÔ: YOU WILL NOT BE ABLE TO INSTALL GEOÄEBUGGER ON A 1571 DRIVE WHICH IS CONFIGURED AS A 1571. ÙOU MUST RE-CONFIGURE THE DRIVE AS A 1541, AND RE-OPEN THE GEOÐROGRAMMER Ö2.0 DISK, BEFORE YOU CAN INSTALL GEOÄEBUGGER. ÔHIS BUG WILL BE CORRECTED IN THE SOFTWARE YOU RECEIVE IN ROUND TWO. ÉF YOU HAVE ANY QUESTIONS REGARDING OUR ÂETA ÔEST PROGRAM OR THE GEOÐROGRAMMER PRODUCT, PLEASE CONTACT ËEVIN ÂOLAND, AND HE WILL CONNECT YOU TO ME OR ONE OF THE OTHER TEAM MEMBERS. ×ELCOME TO THE TEAM, AND THANKS FOR YOUR HELP! ÅRIC Å. ÄEL ÓESTO ÇEOÐROGRAMMER ÐROJECT ÌEADER ÓÔÁÔÅ ÏÆ ÇÅÏÐÒÏÇÒÁÍÍÅÒ Ö2.0 ÂÅÔÁ ÔÅÓÔ ÒÏÕÎÄ 1 GEOÁSSEMBLER: ÓHOULD BE FAIRLY SOLID. ÂE TOUGH ON IT. GEOÌINKER: ÈAS SOME KNOWN BUGS, BUT SHOULD BE ABLE TO CORRECTLY LINK ÓÅÑ, ÃÂÍ, AND ÖÌÉÒ APPLICATIONS. GEOÄEBUGGER: ÓHOULD BE ROCK SOLID. ÔORTURE IT. ÍAKE IT DIE. ÓAMPLE ÇÅÏÓ ÆILES: ÁRE ON THE DISK, AND HAVE BEEN UPGRADED TO INCLUDE ÇÅÏÓ 128 AND ÇÅÏÓ 64 Ö2.0 DEFINITIONS. ÎOT THAT BEFORE YOU INCLUDE THESE FILES, YOU MUST SET THE CONSTANTS Ã64 AND Ã128 TO ÔÒÕÅ ($ÆÆ) OR ÆÁÌÓÅ ($00). ÓAMPLEÓEQ: ÎOT INCLUDED ON ÂETA ÒOUND 1 DISK. ÓAMPLEÖLIR: ÁLL THE REQUIRED FILES ARE ON THE ÂETA ÒOUND 1 DISK. ÎOTE THAT THE ÓAMÖLIRÅQUATES FILE SETS THE Ã64 AND Ã128 CONSTANTS. ÔHESE ARE PRESENTLY SET SO THAT THE APPLICATION WILL ONLY RUN UNDER Ã64 ÇÅÏÓ. ÉF YOU ARE TESTING ON A Ã128, BE SURE TO CHANGE THESE CONSTANT DEFINITIONS BEFORE YOU BEGIN. ÁLSO- THERE ARE SEVERAL NEW ADDITIONS TO THE ÓAMPLEÖLIR FILES, SUCH AS SUPPORT FOR KEYBOARD SHORTCUTS IN THE MENUS. ÙOU CAN EXPECT TO FIND SOME PRETTY OBVIOUS BUGS IN SOME OF THESE NEW FEATURES. ÓAMPLEÄÁ: ÎOT INCLUDED ON ÂETA ÒOUND 1 DISK. ÓAMPLEÃÂÍ: ÔHIS IS A NEW SAMPLE FILE, TO DEMONSTRATE THE NON-ÇÅÏÓ CAPABILITY OF GEOÄEBUGGER Ö2.0. ÎOT INCLUDED ON ÂETA ÒOUND 1 DISK. ÇÅÏÐÒÏÇÒÁÍÍÅÒ ÉÍÐÒÏÖÅÍÅÎÔÓ ÉN ÖERSION 2.0 GEOÁSSEMBLER: ONE PROGRAM RUNS UNDER ÇÅÏÓ 64 ÁÎÄ ÇÅÏÓ 128 (80 COLUMN ONLY ON 128) FILE SELECTION Ä SCROLLS FASTER AND HOLDS 239 FILENAMES IMPROVED OUTPUT FILE CREATION: FASTER ASSEMBLIES, DELETES PARTIAL FILES AFTER DISK ERRORS HAS .TEXT DIRECTIVE TO ASSEMBLE ASCII INTO ÃÂÍ TEXT CODES. EXAMPLE: .TEXT "ÔHIS IS TEXT FOR THE ÃÂÍ TEXT SCREEN" Ã64 MODE ONLY: WILL GENERATE UP TO 3584 CODE BYTES MAX NUMBER OF MACRO DEFINITIONS: 100 SIZE OF MACRO STORAGE BUFFER: 3560 SYMBOL TABLE HOLDS 1151 SYMBOLS Ã128 MODE ONLY: WILL GENERATE UP TO 7670 CODE BYTES MAX NUMBER OF MACRO DEFINITIONS: 389 SIZE OF MACRO STORAGE BUFFER: 12520 SYMBOL TABLE HOLDS 3208 SYMBOLS GEOÌINKER: ONE PROGRAM RUNS UNDER ÇÅÏÓ 64 ÁÎÄ ÇÅÏÓ 128 (80 COLUMN ONLY ON 128) FILE SELECTION Ä SCROLLS FASTER AND HOLDS 210 FILENAMES IMPROVED OUTPUT FILE CREATION: FASTER LINKS, DELETES PARTIAL FILES AFTER DISK ERRORS IMPROVED .LNK FILE PARSING: ALLOWS MULTIPLE PAGE .LNK FILES, GIVES MORE INFORMATIVE ERROR MESSAGES .ÓÙÍ FILE CAN HAVE 60 LINES/PAGE ÖÌÉÒ LINKS: UP TO 21 MODULES (RESIDENT + 20 OVERLAY) ALLOWS UP TO 20 .REL FILES PER MODULE (OR TOTAL IN ÓÅÑ LINK) Ã64 MODE ONLY: BUFFER FOR COMPACTED .ÌÎË FILE HAS 3840 BYTES CODE BUFFER IS 3584 BYTES RESIDENT SYMBOL TABLE HOLDS 1274 SYMBOLS SWAP MODULE SYMBOL TABLE HOLDS 850 SYMBOLS DURING ÓÅÑ AND ÃÂÍ APPLICATION LINKS, COMBINES SYMBOL TABLES TO ALLOW A TOTAL OF 2124 SYMBOLS Ã128 MODE ONLY: BUFFER FOR COMPACTED .ÌÎË FILE HAS 3840 BYTES CODE BUFFER IS 7670 BYTES RESIDENT SYMBOL TABLE HOLDS 3217 SYMBOLS SWAP MODULE SYMBOL TABLE HOLDS 1740 SYMBOLS (STATE OF THE PRODUCT, CONTINUED...) GEOÄEBUGGER: IMPROVED ERROR DETECTION WHEN PARSING .ÄÂÍ FILES, PRINTS PAGE AND LINE NUMBER WITH ERROR MESSAGE CAN TOP-STEP OVER IN-LINE CALLS TO ÇÅÏÓ ROUTINES SUCH AS I_ÒECTANGLE ÍINI ÄEBUGGER (Ã64/Ã128) OCCUPIES $3500-$5ÆÆÆ, PLUS $334-$3FF IN BANK 1 (HOLD ÒÕÎ/ÓÔÏÐ KEY DOWN WHILE RUNNING GEOÄEBUGGER TO INVOKE THE MINI-DEBUGGER.) ÓUPER ÄEBUGGER (Ã64/Ã128 WITH ÒÅÕ) MACRO BUFFER IS 1024 BYTES SYMBOL TABLE HOLDS 731 SYMBOLS OCCUPIES SPACE IN ÒÅÕ BANK 0, PLUS $334-$3FF IN BANK 1 (ÉF YOU HAVE A ÒÁÍ ÅØÐÁÎÓÉÏÎ ÕÎÉÔ ON YOUR SYSTEM, THIS DEBUGGER WILL AUTOMATICALLY LOAD WHEN YOU RUN GEOÄEBUGGER. ÂY HOLDING ÒÕÎ/ÓÔÏÐ OR ÓÐÁÃÅ DOWN, YOU CAN OVERRIDE THIS TO RUN THE ÍINI-ÄEBUGGER OR ÂACKÒAM ÓUPER-ÄEBUGGER.) ÂACKÒAM ÓUPER ÄEBUGGER (Ã128 ONLY) (128 MODE HAS NEW "ÂACKÒAM ÓUPERÄEBUGGER", WHICH HIDES IN ÂACKÒAM. ÕSER CAN WRITE FULL-SIZED APPLICATIONS IN ÆRONTÒAM.) ÃAN HANDLE 1000 SYMBOLS AND 1Ë OF MACRO DEFINITIONS. MACRO BUFFER IS 1024 BYTES SYMBOL TABLE HOLDS 910 SYMBOLS OCCUPIES $2000-$9ÆÆÆ IN Ã128 BANK 0, PLUS $334-$3FF IN BANK 1 (ÉF YOU HAVE AN ÒÅÕ ON YOUR Ã128 SYSTEM, YOU MUST HOLD THE ÓÐÁÃÅ KEY DOWN WHILE RUNNING GEOÄEBUGGER TO INVOKE THE ÂACKÒAM ÓUPER-ÄEBUGGER.) ÁDDITIONAL TECHNICAL INFORMATION ON GEOÄEBUGGER Ö2.0 (ÙOU MIGHT FIND THIS INFORMATION INTERESTING.) NO ÇÅÏÓ SCREEN ASSUMPTIONS: DISPLAYS DEBUG INFORMATION ON 40-COLUMN SCREEN, AND RETURNS TO WHATEVER SCREEN (AND SCREEN MODE) WAS IN USE WHEN RUNNING USER CODE, OR WHEN Æ7 IS PRESSED SEE BELOW ABOUT DEBUGGER'S SHADOW VARS FOR ÖÉà PARAMETERS NEW AND IMPROVED MEMORY READ/WRITE ROUTINE: ÉNTERCEPTS (AND REDIRECTS TO DEBUGGER SHADOW VARIABLES) READS AND WRITES TO: $0000 AND $0001 (REGISTERS WHICH CONTROL MEMORY MAP) AREA OF ZERO PAGE WHICH IS USED BY DEBUGGER MEMORY AREAS USED BY ÒÅÕ ÓUPERÄEBUGGER (REDIRECTS TO USER MEMORY SWAP AREA IN BANK #0 OF ÒÅÕ) SEVERAL ÖÉà CHIP REGISTERS, INCLUDING $ÄÄ00 (CIA2ÂASE), WHICH CONTROLS ÖÉà MEMORY MAP ON 128: $Ä500-$Ä50Á (MEMORY MANAGMENT UNIT) $ÆÆ00-$ÆÆ04 (MORE MMU REGISTERS) $Ä030 (1ÍÈÚ/2ÍÈÚ SWITCH) ÄISALLOWS READS AND WRITES TO: ALL ÒÏÍ AREAS (SO NO BLEED THROUGH TO ÒÁÍ OCCURS) ANY AREA WHERE DEBUGGER CODE OR SYMBOLS ARE STORED (5 DIFFERENT CASES HERE, DUE TO 3 DEBUGGER TYPES ON 2 MACHINES.) STACK AREA BELOW CURRENT ÓÐ (DEBUGGER IS USING) PAGE 3 ÉÒÑ/ÂÒË/ÎÍÉ VECTORS USED BY ÒÏÍS $ÆÆÆ9 AREA ÉÒÑ/ÂÒË/ÎÍÉ VECTORS RAM EXPANSION UNIT'S ÄÍÁ CONTROLLER, IF USING ÒÅÕ ÓUPERÄEBUGGER "CTAB" - EXTERNAL 1ËX4 ÒÁÍ USED BY ÖÉà CHIP IN TEXT MODE. ÏN 128, THERE ARE TWO OF THESE. ÄEBUGGER USES CTAB #1, AND PREVENTS Ò/× TO IT. ÕSER IS FREE TO USE CTAB #0. ×HEN ACCESSING ÒÁÍ IN 128 MODE, CALCULATES EFFECTIVE ADDRESS, TAKING BANK NUMBER AND BANK SHARING STATUS INTO ACCOUNT. ÎEW AND IMPROVED CONTEXT SWITCH (SECTION OF CODE WHICH BRIDGES GAP BETWEEN DEBUGGER AND USER CODE): TRAPS INTERRUPTS WHICH OCCUR WHEN USER'S APPLICATION SWAPS ÒÏÍ IN WITHOUT DISABLING INTERRUPTS; WARNS USER THROUGH DEBUGGER MESSAGE. ON 128 SYSTEM: HANDLES BANK-TO-BANK SWITCHING REQUIRED TO GET FROM EITHER BANK TO ONE OF 3 DEBUGGERS. SAVES AND RESTORES PROCESSOR CLOCK SPEED 1ÍÈÚ / 2ÍÈÚ * ÉMPROVED ÇET / ÐUT COMMAND: WORKS WITH 1571 AND 1581 DRIVES. * ÄISASSEMBLES AND TOP-STEPS THROUGH IN-LINE CALLS TO ÇÅÏÓ CORRECTLY. ÕSER CAN DISABLE THIS OPTION. * DISPLAYS ÃÐÕ_ÄÁÔÁ ($0001) OR ÃONFIG ($ÆÆ00) AS PRIMARY MEMORY MAP REGISTER IN 64 AND 128 MODES RESPECTIVELY. ÔHIS AFFECTS THE "Ò" REGISTER DISPLAY COMMAND AND THE "ÒÅÇ" REGISTER DISPLAY/MODIFY COMMAND. ÁDDITIONAL TECHNICAL INFORMATION ON GEOÄEBUGGER Ö2.0 (CONTINUED) ÍORE ERROR CHECKING DURING FILE LOADS, WITH INFORMATIVE DIALOG BOXES: EXTENSIVE ERROR CHECKS AND GOOD ERROR DIALOG BOXES FOR: DEBUGGER MODULE SWAPS USER APPLICATION LOADS MACRO FILE LOADS SYMBOL FILE LOADS DISPLAYS INFORMATIVE ERROR DIALOG BOX FOR FORMAT ERRORS IN GEO×RITE MACRO DEFINITION FILES. ÄISPLAYS FILENAME, ERROR MESSAGE, PAGE AND LINE NUMBER. CAN DEBUG APPLICATIONS WHICH TRASH ÇÅÏÓ APPLICATION MUST HANDLE LOADING ITS OWN CODE IN OVER ÇÅÏÓ AREAS APPLICATION MUST DISABLE INTERRUPTS OR SET UP ITS OWN INTERRUPT SERVICE ROUTINE. ×ILL HAVE TO BE CLEVER TO PLACE HIS INTERRUPT VECTOR IN $334 AREA WHEN HIS APPLICATION IS RUNNING UNDER THE DEBUGGER. (É WILL SUPPLY THIS CODE IN THE NEW SAMPLE APP.) ÕNSEEN COMPLICATIONS WHICH ARE HANDLED: BANK SWITCH CONCERNS DURING: CONTEXT SWITCH ÊÓÒ COMMAND ÇET / ÐUT COMMANDS RBOOT MAINTAINING SOFTWARE BREAKPOINTS SINGLE STEP BREAKPOINT ÁND ALL BUGS HAVE BEEN FIXED! ÁDDITIONAL TECHNICAL INFORMATION ON GEOÄEBUGGER Ö2.0 (CONTINUED) ÈOW ÇEOÄEBUGGER MANAGES MACHINE-DEPENDENT MEMORY-MAP ENVIRONMENT INFORMATION ÔHE DEBUGGER CARRIES MEMORY-MAP ENVIRONMENT INFORMATION, WHICH IS MACHINE- DEPENDENT, AROUND IN GENERIC VARIABLES SUCH AS APPÂANKÉNFO1 AND APPÂANKÉNFO2. ÔHIS WAY, THE ROUTINES WHICH JUST MOVE THIS INFORMATION AROUND (BUT DON'T DIRECTLY USE IT) ARE MACHINE-INDEPENDENT. ÅXECUTION ÅNVIRONMENT: ×HEN THE DEBUGGER STOPS EXECUTION OF AN APPLICATION (ÒÅÓÔÏÒÅ PRESSED OR ÓÂÐ HIT), THE USER'S "EXECUTION ENVIRONMENT" IS SAVED. ÔHIS INCLUDES: PROCESSOR REGISTER AND FLAG VALUES Ðà ADDRESS CURRENT BANK INFORMATION ZERO PAGE VARIABLES STACK INFORMATION ×E CALL THE Ðà ADDRESS AND ITS MEMORY-MAP INFORMATION THE "ÅXECUTION ÅNVIRONMENT" OR MORE SIMPLY, THE "Ðà POINTER". ÖIEWING ÅNVIRONMENT: ÏNCE THE DEBUGGER HAS STOPPED AN APPLICATION, THE "VIEWING ENVIRONMENT" IS THE SAME AS THE "EXECUTION ENVIRONMENT". ÔHIS MEANS THAT ALL OF THE MEMORY EXAMINATION AND MODIFICATION COMMANDS USE THE SAME MEMORY-MAP INFORMATION AS THE ÅXECUTION ÅNVIRONMENT. ÔHROUGH USE OF THE ÓÅÔÖÉÅ× COMMAND, THE VIEWING ENVIRONMENT CAN BE CHANGED. ÙOU CAN SET UP A NEW MEMORY-MAP CONFIGURATION, AND THEN USE THE MEMORY EXAMINATION AND MODIFICATION COMMANDS TO READ/WRITE MEMORY IN THIS NEW CONFIGURATION. ×HEN YOU GIVE THE ÇÏ COMMAND TO RESUME EXECUTION, THE DEBUGGER RESTORES THE EXECUTION ENVIROMENT, AND YOUR PROGRAM CONTINUES EXECUTION. ×E CALL THE VIEWING ADDRESS AND ITS ENVIRONMENT THE "Ìà POINTER". ------------------------------------------------------------------------------- ÁSPECTS OF ÇEOÄEBUGGER WHICH MUST CHANGE ACCORDING TO MACHINE-DEPENDENCIES IN Ö2.0, TO REMAIN COMPATIBLE WITH Ö1.0. (ËILL THESE IN Ö3.0.) ÒEGISTER COMMAND: DISPLAYS Ðà ADDRESS, HIGHLIGHTS ADDRESS IF EFFECTIVE ADDRESS OF Ðà (CONSIDERING Ðà BANK INFO) IS BANK 0. DISPLAYS ÃÐÕ_ÄÁÔÁ VALUE (ÉT REALLY SHOULD NOT DO THIS ANYMORE, BUT É AM TRYING TO MAINTAIN COMPATABILITY WITH Ö1. 64: READ DIRECTLY FROM APPÂANKÉNFO1 128: [7-3,0]: DIRECT READ FROM MEMORY [21]: SHADOW WITH APPÃÐÕ_Â21 ÁDDITIONAL TECHNICAL INFORMATION ON GEOÄEBUGGER Ö2.0 (CONTINUED) ÒEGISTER ÏPEN ÃOMMAND: ..INCLUDES ÍÍ REGISTER: IS ÃÐÕ_ÄÁÔÁ. (ÔO BE COMPATIBLE WITH Ö1) 64: DIRECTLY READ/WRITE TO APPÂANKÉNFO1 128: [7-3,0]: DIRECTLY Ò/× TO MEMORY [21]: SHADOW WITH APPÃÐÕ_Â21 ------------------------------------------------------------------------------- ÁSPECTS OF ÇEOÄEBUGGER WHICH ARE MACHINE-INDEPENDENT. ÍEMORY EXAMINATION AND MODIFICATION: BANK COMMAND: AFFECTS ÌÃ'S BANK INFO: CURÂANKÉNFO1 AND CURÂANKÉNFO2 OPEN MODES: USES ÌÃ'S BANK INFO HIGHLIGHTS ADDRESS IF IS IN PHYSICAL BANK 0 DUMP COMMAND: USES ÌÃ'S BANK INFO HIGHLIGHTS ADDRESS IF IS IN PHYSICAL BANK 0 MOVE/FILL/DIFF/FIND: USES ÌÃ'S BANK INFO HIGHLIGHTS ADDRESS IF IS IN PHYSICAL BANK 0 @ AND @@ OPERATORS: USES ÌÃ'S BANK INFO ÓINGLE AND ÔOP-STEP BREAKPOINTS: MAINTAIN THEIR OWN BANK INFORMATION (COPIED FROM Ðà BANK INFO BEFORE EXECUTION BEGUN) ÓOFTWARE ÂREAKPOINTS: MAINTAIN THEIR OWN BANK INFORMATION (COPIED FROM Ðà BANK INFO BEFORE EXECUTION BEGUN) Ðà COMMAND: WITHOUT ARGUMENT: COPY Ðà ADDRESS AND BANK INFO TO Ìà (RESTORES EXECUTION ENVIRONMENT) WITH ARGUMENT: (SAME AS SETTING Ðà IN OPEN MODE) SET Ðà ADDRESS = ARGUMENT SET Ðà BANK INFO = Ìà BANK INFO ÁDDITIONAL TECHNICAL INFORMATION ON GEOÄEBUGGER Ö2.0 (CONTINUED) (ÔÈÉÓ ÐÏÒÔÉÏÎ ÏÆ ÔÈÅ ÇÅÏÄÅÂÕÇÇÅÒ ÔÅÓÔ ÌÉÓÔ ÉÓ ÓÕÐÐÌÉÅÄ ÔÏ ÇÉÖÅ ÙÏÕ ÁÎ ÉÄÅÁ ÏÆ ÈÏ× ÔÈÅ ÍÅÍÏÒÙ-ÅÎÖÉÒÏÎÍÅÎÔ ÍÁÎÁÇÅÍÅÎÔ ÃÏÍÍÁÎÄÓ ×ÏÒË.) 4.10 ÍEMORY-ÍAP ÅNVIRONMENT ÍANAGEMENT 4.10.1 ÉÎÉÔÖÉÅ× COMMAND: COPIES THE MEMORY-MAP ENVIRONMENT INFO FROM THE EXECUTION VARIABLES (ÐÃ) TO THE DISPLAY/MODIFY VARIABLES (ÌÃ). ÕSED WHEN USER HAS BEEN VIEWING DIFFERENT BANKS, AND NOW WANTS TO EXAMINE THE MEMORY MAP AS IT WAS WHEN WE STOPPED EXECUTION. 64 128 128 ÒÅÕ ÒÅÕ ÂÁÃË ___ ___ ___ INITVIEW NO ARGUMENTS. ÄISPLAYS Ðà LINE AND ENVIRONMENT INFO. ___ ___ ___ NOTE THAT Ðà COMMAND HAS SAME EFFECT OF COPYING ENVIRONMENT INFORMATION, BUT DOES NOT DISPLAY MEMORY-MAP INFO WHEN DONE. ___ ___ ___ VERIFY THAT "ÉÖ" COMMAND ALIAS WORKS 4.10.2 ÓÅÔÖÉÅ× COMMAND: SETS THE MEMORY-MAP ENVIRONMENT FOR THE DISPLAY/MODIFY COMMANDS. ÄISPLAYS NEW ENVIRONMENT INFO IF NO ERROR. FORMAT: SETVIEW <ÍEMÍAP1> [, <ÍEMÍAP2> ] ___ ___ ___ SETVIEW <ÍEMÍAP1> SETS APPÍEMÍAP1. ___ ___ Ã128: SHOULD NOT AFFECT APPÍEMÍAP2 SETVIEW <ÍEMÍAP1>,<ÍEMÍAP2> ___ ___ Ã128: SETS APPÍEMÍAP1 AND APPÍEMÍAP2. ___ ___ Ã128: VERIFY THAT Â7 AND Â6 ARE CLEARED IN APPÍEMÍAP2 (THIS VARIABLE MUST HAVE 0'S IN THOSE POSITIONS) ___ ___ ___ DISPLAYS NEW ENVIRONMENT INFO CORRECTLY ___ ___ ___ ERROR IF NO ARGUMENTS GIVEN ___ ___ ___ ERROR IF EITHER VALUE GREATER THAN 255. ___ ___ ___ VERIFY THAT "ÓÖ" COMMAND ALIAS WORKS 4.10.3 ÖÉÅ× COMMAND: DISPLAYS CURRENT MEMORY-MAP ENVIRONMENT INFO. ___ ___ ___ VIEW NO ARGUMENTS REQUIRED ___ Ã64: ONLY DISPLAYS 1ST OF 2 VALUES ON EACH LINE ___ ___ Ã128: DISPLAYS BOTH VALUES ON EACH LINE ___ ___ ___ VERIFY THAT "Ö×" COMMAND ALIAS WORKS 4.10.4 ÕÓÅÖÉÅ× COMMAND: FORCES THE DISPLAY/MODIFY ENVIRONMENT UPON THE EXECUTION ENVIRONMENT. ÄISPLAYS NEW INFO WHEN FINISHED. ___ ___ ___ USEVIEW NO ARGUMENTS REQUIRED ___ ___ ___ VERIFY THAT "ÕÖ" COMMAND ALIAS WORKS 4.10.5 Â0 COMMAND: SET DISPLAY/MODIFY ENVIRONMENT VARIABLE SO THAT ALL OF BANK 0 IS VISIBLE. ÄISPLAYS NEW INFO WHEN FINISHED. ___ ___ ___ B0 NO ARGUMENTS REQUIRED 4.10.6 Â1 COMMAND: SET DISPLAY/MODIFY ENVIRONMENT VARIABLE SO THAT ALL OF BANK 1 IS VISIBLE. ÄISPLAYS NEW INFO WHEN FINISHED. ___ ___ ___ B1 NO ARGUMENTS REQUIRED 4.10.7 ÍEMORY-ÍAP ÅNVIRONMENT ÍANAGEMENT... ÔÅÓÔ: VIEW ENVIRONMENT SAME AS EXECUTION ENVIRONMENT WHEN SOFTWARE BREAKPOINT IS HIT OR ÒÅÓÔÏÒÅ IS PRESSED. ___ ___ ___ USE VIEW COMMAND, VALUES ON TWO LINES SHOULD BE EQUAL. ÁDDITIONAL TECHNICAL INFORMATION ON GEOÄEBUGGER Ö2.0 (CONTINUED) ÔÅÓÔ: THE FOLLOWING COMMANDS, MAKING SURE THAT THEY USE THE VIEW ENVIRONMENT MEMORY-MAP INFORMATION WHEN ACCESSING MEMORY. ___ ___ ___ "Á" OPEN MODE ___ ___ ___ "Í" OPEN MODE ___ ___ ___ DEPOSITING VALUES WHEN IN AN OPEN-MODE ___ ___ ___ @ AND @@ OPERATORS IN EXPRESSIONS ___ ___ ___ ÄÕÍÐ ___ ___ ___ ÄÉÓ ___ ___ ___ Î ___ ___ ___ × ___ ___ ___ ÐÒÉÎÔ ___ ___ ___ ÆÉÌÌ / ÃÏÐÙ / ÄÉÆÆ / ÆÉÎÄ ÔÅÓÔ: THAT EXECUTION ENVIRONMENT IS USED WHEN EXECUTION IS RE-STARTED. ___ ___ ___ NEED TEST CODE FOR THIS... ÔÅÓÔ: (Ã128 ONLY) IN THE FOLLOWING COMMANDS, AN ADDRESS SHOWS UP HIGHLIGHTED IF THE EFFECTIVE ADDRESS (CONSIDERING ÒÁÍ SHARING) IS IN BANK 0. ÈINT: TO SET Ìà TO BANK 0, USE Â0 COMMAND. ÔO SET Ðà TO BANK 0, USE Â0 FOLLOWED BY ÕÓÅÖÉÅ× COMMAND. ___ ___ "Ò" ___ ___ "Á" OPEN MODE ___ ___ "Í" OPEN MODE ___ ___ ÄÉÓ, ×, Î, ETC. ___ ___ ÄÕÍÐ ___ ___ ÄÉÆÆ ___ ___ ÆÉÎÄ ___ ___ ÈÉÓÔÏÒÙ ------------------------------------------------------------------------------ Ö1.000 11/2/87 ÓENT TO ÈÌÓ, BUT NEVER MASTERED DUE TO 128 CRASHES. ÃÏÍÐÌÅÔÅ ÍÁÓÔÅÒ ÒÅÌÅÁÓÅ ÔÁÐÅ ÍÁÄÅ 11/11/87. ÔHIS ÖÅÒÓÉÏÎ 1.0 (11/2/87) RELEASE WAS SENT TO ÈÌÓ, BUT WAS NEVER MASTERED BECAUSE ÂRIAN HAD ME CHANGE THE 128 ENABLE BIT IN EACH APPLICATION'S HEADER BLOCK. ÓEE Ö1.010 FOR LIST OF KNOWN BUGS. ------------------------------------------------------------------------------ Ö1.010 11/18/87 ÓENT TO ÚÍÁÇ. ÄUPLICATED AS ÇEOÐROGRAMMER Ö1.0. 4000 SHIPPED WITHOUT ERRATA SHEET. ÅRRATA ITEMS POSTED TO ÑÌÉÎË 1/25/88 ÏNLY DIFFERENCE FROM Ö1.000: BITS SET IN HEADERS SO DOES NOT CRASH ÇÅÏÓ 128. (ÉTEMS MARKED ÐÁÔÃÈ WERE CORRECTED WITH ÐATCH2.88 PROGRAM TO CREATE Ö1.1. ÉTEMS MARKED ÌÁÔÅÒ WERE NOT FIXED UNTIL Ö2.0.) ËNOWN BUGS IN 11.18 RELEASE, WHICH WERE CORRECTED WITH ÐATCH2.88 PROGRAM. ÌINKER HAS TROUBLE CREATING ÖÌÉÒ FILES. ÂUG: VARIABLE CALLED FILE×RITTEN NOT SET TO ÔÒÕÅ, SO ÂÁÍ IS RE-READ FROM DISK INSTEAD OF USING MORE RECENT ÂÁÍ WHICH IS IN MEMORY. ÁSSEMBLER HAS TROUBLE WITH LOCAL LABELS AFTER PARSING A BITMAP OR ROUTINE LONGER THAN 254 BYTES. ÂUG: TWO BRANCHES SKIP TOO FAR AND MISS CODE WHICH RESETS A VARIABLE. ÁSSEMBLER HAS TROUBLE WITH BITMAPS. ÂUG: UNCOMPACTING WRONG. ÌINKER HAS TROUBLE WITH .RAMSECTS IN ÒESIDENT AND ÓWAP MODULES. ËNOWN BUGS IN 11.18 RELEASE, NOT CORRECTED UNTIL Ö2.0: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ÁSSEMBLER (THINGS TO MENTION IN ERRATA LIST): ÉN ASSEMBLER, IF ENCOUNTER DISK ERROR, SHOULD ATTEMPT TO CLOSE ANY OPENED FILES SO DISK IS NOT INCONSISTENT. ÅÒÒÁÔÁ: WARN THEM, TELL THEM TO DELETE FILES AND VALIDATE DISK. ÁSSEMBLER HAS TROUBLE UNCOMPACTING BITMAPS OF LESS THAN 18 PIXELS HEIGHT ÅÒÒÁÔÁ: DON'T DO IT ÉF A ROUTINE IS LARGE ENOUGH TO COME CLOSE TO THE END OF CODEÂUFFER, IT COULD OVERFLOW INTO THE ÅXTERNAL ÒEFERENCE ÂUFFER. ÅÒÒÁÔÁ: KEEP ROUTINES SMALLER THAN APPROX 250 BYTES (ASK TED) ÁSSEMBLER: DOES NOT PRINT CORRECT PAGE NUMBER IN ERROR MESSAGES REFERRING TO BRANCH INSTRUCTIONS. ÁLSO COUNTS MACRO EXPANSION LINES, SO MOST ERROR MESSAGES ARE OFF. ÅÒÒÁÔÁ: IF YOU GET A LOCAL LABEL ERROR, CONSIDER THAT IT MIGHT BE ON THE PREVIOUS PAGE (OR PAGE BEFORE THAT). ÏTHER ERRORS: CONSIDER MACRO EXPANSIONS WHEN COUNTING LINE NUMS. ×HEN ASSEMBLING ÌÄÁ ÚÐ,Ù (WHICH DOES NOT EXIST), ASSEMBLER SHOULD SUBSTITUTE ÌÄÁ ÁÂÓ,Ù. ÅÒÒÁÔÁ: WARN AND TELL THEM HOW TO GET AROUND IT. LDA #ÒELOCÖALUE OR .BYTE ÒELOCÖALUE PASSES RELOCATION POINTER TO LINKER WHICH TRASHES WORD IN CODE. ÁSSEMBLER SHOULD GENERATE ERROR MESSAGE. ÅÒÒÁÔÁ: USE LOW BYTE OPERATOR: "[" BEFORE ANY SUCH REFERENCES. "*" OPERATOR ALWAYS GETS PSECT VALUE, SO DOES NOT WORK IN RAMSECT OR ZSECT AREAS. ÅÒÒÁÔÁ: WARN THEM ÉN ASSEMBLER, SCREEN COLORS NOT SET CORRECTLY, SO CAN SEE ÉNSORT WORKING BY CHANGING YOUR SCREEN COLORS. ÅÒÒÁÔÁ: TELL THEM TO CLOSE THEIR EYES DURING ASSEMBLIES. ÄOES NOT LOOK FOR ÇEO×RITE CORRECTLY WHEN OPENING ERROR FILE: SHOULD LOOK FOR PERMANENT NAME STRING. ÅÒÒÁÔÁ: DO NOT RENAME YOUR GEO×RITE. ÁSSEMBLER: (THINGS É WAS TOLD ABOUT TOO LATE TO MENTION THEM IN THE ERRATA LIST) "+" OPERATOR DOES NOT WORK IN UNARY CASE ÐHASE ÅRROR: JSR $0045 DOES NOT ASSEMBLE CORRECTLY. ×HEN AN UNRESOLVED SYMBOL IS USED AS THE SECOND OPERAND IN AN EXPRESSION THAT INVOLVES A DIVISION OR A MODULUS, THE EXPRESSION WILL NOT BE PASSED TO THE LINKER. ÉNSTEAD, IT WILL GENERATE AN ERROR IN THE ASSEMBLER. ÁSSEMBLER: (THINGS NOT TO MENTION IN ERRATA LIST) ÁSSEMBLER'S BITMAP DECOMPACTION CODE DOES NOT HANDLE ÂIGÃOUNT VALUES CORRECTLY. ÎOT A BIG PROBLEM: PHOTO SCRAPS UP TO ÇÅÏÓ Ö1.3 WORK OK. ÉF THERE IS ANY TEXT AFTER A .ENDM, PRODUCES "ÈIDDEN ÅRROR". ÆILE SELECTION Ä BUG: COULD RUN PROGRAM WITHOUT CHOOSING A FILE. ÁSSEMBLER SHOULD NOT PASS ÐASS1, ÐIC×, AND ÐICÈ SYMBOLS TO LINKER. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ÌINKER: (THINGS TO MENTION IN ERRATA LIST) ÉN LINKER, IF ENCOUNTER DISK ERROR, SHOULD ATTEMPT TO CLOSE ANY OPENED FILES SO DISK IS NOT INCONSISTENT. ÅÒÒÁÔÁ: WARN THEM, TELL THEM TO DELETE FILES AND VALIDATE DISK. ÌINKER: WHEN USING ÆREEÂLOCK TO DELETE HEADER BLOCKS FROM ÃÂÍ FILES, DOES NOT REALIZE THAT 1.2 KERNAL DOES NOT HAVE CODE FOR 'ÆREEÂLOCK'. ÅÒÒÁÔÁ: WARN THEM, SUGGEST THEY UPGRADE TO ÇÅÏÓ 1.3. ÌINKER: DOES NOT CORRECT FOR ILLEGAL .REL FILENAMES. ÄOES NOT GIVE CORRECT ERROR FOR .REL FILE NOT FOUND. ÄOES NOT STOP AFTER FIRST 10 .REL FILES IN A MODULE, PRODUCING A BUG. ÅÒÒÁÔÁ: WARN THEM NOT TO HAVE MORE THAN 10 .REL FILES PER MODULE. ÏN ONE-DRIVE SYSTEM, LINKER DOES NOT DISPLAY "SYM FILE" DIALOG BOX. ÅÒÒÁÔÁ: TELL THEM TO BUY A SECOND DRIVE. ÉN LINKER, SCREEN COLORS NOT SET CORRECTLY, SO CAN SEE ÉNSORT WORKING BY CHANGING YOUR SCREEN COLORS. ÅÒÒÁÔÁ: TELL THEM TO CLOSE THEIR EYES DURING ASSEMBLIES. ÄOES NOT LOOK FOR ÇEO×RITE CORRECTLY WHEN OPENING ERROR FILE: SHOULD LOOK FOR PERMANENT NAME STRING. ÅÒÒÁÔÁ: DO NOT RENAME YOUR GEO×RITE. ÌINKER: (THINGS É WAS TOLD ABOUT TOO LATE TO MENTION THEM IN THE ERRATA LIST) "+" OPERATOR DOES NOT WORK IN UNARY CASE, AND "//" OPERATOR DOES NOT WORK. ÅÒÒÁÔÁ: É DIDN'T HEAR ABOUT THIS UNTIL IT WAS TOO LATE. ÌINKER: (THINGS NOT TO MENTION IN ERRATA LIST) ÌINKER IS NOT CLEARING ÚÐ FLAG BIT, SO IN DEBUGGER SOME SYMBOLS HAVE A GRAPHICS CHARACTER IN POSITION 3. ÌINKER DOES NOT STOP AT 99 ERRORS. ÆILE SELECTION Ä BUG: COULD RUN PROGRAM WITHOUT CHOOSING A FILE. ×HEN .LNK FILE IS WRITE-PROTECTED, LINKER DISPLAYS ÄÂ. ÃLICK ON IGNORE TO CONTINUE. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ÄEBUGGER: (MENTION IN ERRATA LIST:) SOME SYMBOLS SHOW UP WITH GRAPHICS CHAR IN POSITION 3. ÉS REALLY A LINKER BUG. ÅÒÒÁÔÁ: WARN THEM, SUGGEST THEY USE * WILDCARD DURING SEARCHES. ÄEBUGGER: (DO NOT MENTION IN ERRATA LIST:) DEBUGGER FILE-SELECT Ä DOES NOT DISPLAY WRITE-PROTECTED FILES DEBUGGER DOES NOT LOAD ÐÒÇ FILES WHICH ARE WRITE-PROTECTED CORRECTLY DEBUGGER IS NOT SAVING OR RESTORE DESKÔOP'S ÒÏÍ VECTORS ($314-$318) CORRECTLY. ÉS NOT PREVENTING WRITES TO $314-$315. ÎOT A BIG PROBLEM: MY VECTORS AT $314 AND $316 ARE THE SAME ANYWAY. ÆIXED 2/1/88 BY CORRECTING BASÂÒËÖEC AND BASÉÒÑÖEC IN CONSTANTS FILE. ÎEW CODE INSTALLED IN ÍAY TO HANDLE THIS DIFFERENTLY. ÒÅÕ ÓUPERÄEBUGGER ONLY ALLOWS 768 SYMBOLS, WHERE IT COULD HAVE 870. ÒÅÕ ÓUPERÄEBUGGER DOES NOT GETB/PUTB FROM 1571 DRIVE CORRECTLY. IF YOU HOLD ÓÔÏÐ KEY DOWN WHEN DEBUGGER TURNS ON TEXT SCREEN DURING INITIAL BOOT SEQUENCE, IT ABORTS ITS INIT CYCLE, AND LEAVES YOU AT THE COMMAND PROMPT WITH THINGS SCREWY. ÎOTE: ÂOTH MONITORS IN ÇEOÄEBUGGER HAVE AN UNUSED ROUTINE WHICH TAKES 18 BYTES. ÇÏÏÄ ÌÏÃÁÔÉÏÎ ÆÏÒ ÐÁÔÃÈ ÓÕÂÒÏÕÔÉÎÅÓ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ÓAMPLE ÆILES: (MENTION IN ERRATA LIST) ÉN ÓAMÖLIR.LNK, SHOULD HAVE $3000 INSTEAD OF $5000 FOR VARIABLE AREA. (CAUSES MINI-DEBUGGER TO CRASH) ÉN ÓAMÓEQ.LNK, SHOULD HAVE $3000 INSTEAD OF $5000 FOR VARIABLE AREA. (ÄOES NOT CAUSE MINI-DEBUGGER TO CRASH BECAUSE NO VARS ARE USED.) ÉN ÓAMÓEQ AND ÓAMÖLIRÒES, "ÖÅÒÔÉÃÁÌ" UNDER ÍENUÔABLE SHOULD BE "ÓÕÂ_ÍÅÎÕ". - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ÍANUAL: (MENTION IN ERRATA) .HEADER STRUCTURES ARE CHECKED FOR 12 STATEMENTS, NOT 11. ÄEBUGGER IS NOT AS ISOLATED AS WE MAKE IT SOUND: STILL USES ÇÅÏÓ RAM EXPANSION ROUTINES. ÄEBUGGER USES $340-$3FF, NOT $350-$3FF. ÁÐÐ_ÒÁÍ == $400 HAS BEEN CHANGED TO ÁÐÐ_ÒÁÍ = $400. ÒUNTO (RT) COMMAND WILL ONLY DISPLAY ÇÅÏÓ SCREEN IF OPTION 5 IS ENABLED (G1 COMMAND). ÔHE SAMPLE APPLICATION CANNOT BE RE-RUN WITH GO $400. ÐAGE 7-11 INCORRECT IN STATING THAT RUNTO WILL SHOW SCREEN. ÐAGE 8-1 THE ÂRITISH POUND CHARACTER IS A SINGLE KEY (NO NEED TO PRESS Ã= KEY). ÓAMPLEÖLIR DOES NOT DO ANY ERROR CHECKING WHEN TRYING TO FIND "ÓAMPLEÖLIR" ON DISK. ÉF THEY ARE NOT CAREFUL WHEN CHANGING APPLICATION'S NAME, WILL NOT LOAD CORRECTLY. ×ARN PEOPLE THAT USE OF ÐASS1 IS DANGEROUS; ÔELL THEM TO MAKE SURE THEY HAVE A .PSECT AFTER INCL. ZP VARS FILE. ÍANUAL: (DO NOT MENTION) ÍAY WANT TO EXPLAIN A LITTLE BIT ABOUT INTERRUPT TIMING, OR "WHY MOUSEÄATA CHANGES". ------------------------------------------------------------------------------ Ö1.100 2/88 ÔHIS VERSION IS ACTUALLY Ö1.010 AFTER THE ÐATCH2.88 PROGRAM HAS MODIFIED THE ÁSSEMBLER AND ÌINKER. ÐATCH2.88 DISTRIBUTED THROUGH ÑUANTUMÌINK, AND Ö1.100 ÍASTER DISK CREATED BY RUNNING ÐATCH2.88 ON Ö1.010 ÍASTER DISK. ÔHIS Ö1.100 ÍASTER DISK DUPLICATED BY ÚÍAG, COPIES SENT FREE OF CHARGE TO REGISTERED OWNERS WHO REQUESTED IT. ------------------------------------------------------------------------------ Ö2.000 ÁPRIL 1988 Ã64/Ã128 VERSION, WITH MANY IMPROVEMENTS AND BUG FIXES. ÔÈÉÓ ÉÓ Á ÑÕÉÃË ÌÉÓÔ; SEE "VERSIONÖ2" FILE FOR A SUMMARY. ÁSSEMBLER ÉMPROVEMENTS: RUNS UNDER ÇÅÏÓ 64 AND ÇÅÏÓ 128 (IN 80 COLUMN MODE) ENDING Ä HAS ICON TO RUN LINKER HAS .TEXT DIRECTIVE TO ASSEMBLE ASCII INTO ÃÂÍ TEXT CODES. ÌINKER ÉMPROVEMENTS: RUNS UNDER ÇÅÏÓ 64 AND ÇÅÏÓ 128 (IN 80 COLUMN MODE) ALLOWS UP TO 20 .REL FILES PER MODULE ENDING Ä HAS ICON TO RUN DEBUGGER ÄEBUGGER ÉMPROVEMENTS: ÓAMPLEÆILES ÉMPROVEMENTS: ÎEW WARNINGS FOR MANUAL: ÁSSEMBLING FILES UNDER Ã128 AND LINKING THEM UNDER Ã64-- DOES ÌINKER CHECK FOR TABLES WHICH ARE TOO LARGE? ------------------------------------------------------------------------------ ÔECHNICAL ÏVERVIEW OF ÉMPORTANT ÄIFFERENCES ÂETWEEN ÇEOÐROGRAMMER ÖERSIONS ÁSSEMBLER: ÓINCE CODE RECORD, XREF RECORD, RELOC RECORD, AND ERROR FILE PAGES ARE WRITTEN OUT BLOCK BY BLOCK, WE ARE NOT CONCERNED WITH BUFFER SIZES. ÍACRO TEXT STORAGE SIZE: Ö1.0 2Ë Ö2.0 (64 MODE) 3560 Ö2.0 (128 MODE) 12520 ÓYMBOL TABLE SIZE: Ö1.0 3017+7670 = 10687 (1068 SYMBOLS) Ö2.0 (64 MODE) 11510 (1151 SYMBOLS) Ö2.0 (128 MODE) 32080 (3208 SYMBOLS) ÄOES NOT RUN IN 128 40-COLUMN MODE BECAUSE ALL ÄÍÁ WORK IN BACKRAM CAUSES 40-COLUMN SCREEN TO FLICKER BADLY. ÌINKER: ØREF AND ÒELOC POINTERS ARE READ BLOCK-BY-BLOCK FROM RECORDS, SO WE ARE NOT CONCERNED ABOUT BUFFER SIZES. ÃODE BUFFER SIZE (FOR ONE .REL'S CODE RECORD) Ö1.0 6608 Ö2.0 (64 MODE) 3584 Ö2.0 (128 MODE) 7670 ÒESIDENT MODULE SYMBOL TABLE SIZE: Ö1.0 10Ë = 10240 (1024 SYMBOLS) Ö2.0 (64 MODE) 12740 (1274 SYMBOLS) Ö2.0 (128 MODE) 32170 (3217 SYMBOLS) ÓWAP MODULE SYMBOL TABLE SIZE: Ö1.0 8Ë = 8192 (819 SYMBOLS) Ö2.0 (64 MODE) 8500 (850 SYMBOLS) Ö2.0 (128 MODE) 17400 (1740 SYMBOLS) ÓEQUENTIAL ÁPPS: Ö1.0 10Ë (YOU MIGHT THINK IS 10Ë + 8Ë, BUT THERE IS A BUG: IS ONLY 10Ë) Ö2.0 (64 MODE) 21240 Ö2.0 (128 MODE) 32170 (BACKRAM ONLY. ÍATTÓORT TO USE BOTH BANKS (GIVING 48Ë) WOULD BE A MESS.) ÎUMBER OF .REL FILES PER MODULE: Ö1.0 10 Ö2.0 (64/128) 20 ÃREATING ÇEO×RITE SYM FILES: FOR EACH .DBG RECORD: READ BLOCK BY BLOCK INTO FRONTRAM AND MOVE TO BACK SORT ENTIRE IN BACK FOR EACH SYM IN BACK COPY SYM TO FRONT WRITE TO 5Ë PAGE BUFFER (ÆÇ SCREEN AREA?) WRITE OUT 5Ë BUFFER AS PAGE ÄOES NOT RUN IN 128 40-COLUMN MODE BECAUSE ALL ÄÍÁ WORK IN BACKRAM CAUSES 40-COLUMN SCREEN TO FLICKER BADLY. ÇEOÄEBUGGER: GEOÐROGRAMMER Ö2.0 FOR Ã64 AND Ã128 ÕPGRADE ÏFFER ÓEPTEMBER, 1988 ÄEAR GEOÐROGRAMMER USER: ÏUR LATEST RELEASE OF THE GEOÐROGRAMMER PACKAGE, GEOÐROGRAMMER Ö2.0, WILL SOON BE AVAILABLE. ×E CAN OFFER YOU, AS A REGISTERED GEOÐROGRAMMER OWNER, THIS NEW PRODUCT FOR THE LOW PRICE OF $ØØ.ØØ. ×E HAVE REWRITTEN MUCH OF THE ORIGINAL SOFTWARE, TAKING YOUR SUGGESTIONS INTO ACCOUNT, AND ADDING SOME NEW FEATURES. ÏVERALL ÐRODUCT ÉMPROVEMENTS: - GEOÐROGRAMMER Ö2.0 SUPPORTS THE ÃOMMODORE 128 AND 128Ä COMPUTERS. GEOÁSSEMBLER, GEOÌINKER, AND GEOÄEBUGGER NOW RUN UNDER ÇÅÏÓ 128 AT THE FASTER 2ÍÈÚ CLOCK RATE, USING THE 80-COLUMN SCREEN AND ADDITIONAL MEMORY. - GEOÐROGRAMMER Ö2.0 IS FULLY COMPATIBLE WITH ALL VERSIONS OF ÇÅÏÓ: Ö1.2, Ö1.3, AND Ö2.0, AND WITH THE NEW 1581 DISK DRIVE. - IN BOTH Ã64 AND Ã128 MODES, GEOÐROGRAMMER Ö2.0 RUNS FASTER AND MORE EFFICIENTLY. ÅRROR DETECTION HAS BEEN IMPROVED, AND MORE INFORMATIVE ERROR MESSAGES ARE PROVIDED. ÆILE SELECTION HAS BEEN STREAMLINED. - THE THREE SAMPLE APPLICATIONS HAVE BEEN UPGRADED TO SUPPORT THE Ã128, AND TO ILLUSTRATE MORE ÇÅÏÓ PROGRAMMING CONCEPTS SUCH AS KEYBOARD SHORTCUTS. - THE ÇÅÏÓ "INCLUDE" FILES HAVE BEEN UPDATED TO REFLECT ÇÅÏÓ Ö2.0 INFORMATION. - GEOÐROGRAMMER Ö2.0 INCLUDES AN ADDITIONAL SAMPLE APPLICATION, WHICH DEMONSTRATES HOW YOU CAN DEVELOP "ÃÂÍ" APPLICATIONS WHICH DO NOT REQUIRE ÇÅÏÓ TO RUN. ÉMPROVEMENTS IN GEOÁSSEMBLER Ö2.0: - GEOÁSSEMBLER Ö2.0 WILL READ GEO×RITE SOURCE FILES FROM ALL VERSIONS OF GEO×RITE, UP TO Ö2.1. - NEW .TEXT DIRECTIVE CONVERTS ASCII TEXT STRINGS DIRECTLY INTO ÃOMMODORE SCREEN CODES. ÍAXIMUM ÍAXIMUM ÁSPECT OF GEOÁSSEMBLER Ö2.0 IN Ã64 ÍODE IN Ã128 ÍODE --------------------------------------- --------------- ------------ SYMBOL DEFINITIONS: 1151 SYMBOLS 3208 SYMBOLS MACRO DEFINITIONS: 100 MACROS 389 MACROS OR 3560 BYTES OR 12520 BYTES CODE BYTES GENERATED PER .REL FILE: 3584 BYTES 7670 BYTES --------------------------------------- --------------- ------------ ÉMPROVEMENTS IN GEOÌINKER Ö2.0: - GEOÌINKER Ö2.0 WILL ACCEPT MULTIPLE-PAGE ".LNK" COMMAND FILES, GENERATED WITH ANY VERSION OF GEO×RITE. - WILL LINK UP TO 20 .REL FILES INTO A ÓÅÑ OR ÃÂÍ APPLICATION, AND UP TO 20 .REL FILES PER MODULE IN A ÖÌÉÒ APPLICATION. ÍAXIMUM ÍAXIMUM ÓYMBOL DEFINITIONS IN GEOÌINKER Ö2.0 IN Ã64 ÍODE IN Ã128 ÍODE --------------------------------------- --------------- ------------ WHEN LINKING ÓÅÑ AND ÃÂÍ APPLICATIONS: 2124 SYMBOLS 3217 SYMBOLS WHEN LINKING ÖÌÉÒ APPLICATIONS: RESIDENT MODULE: 1274 SYMBOLS 3217 SYMBOLS FOR EACH OVERLAY MODULE: 850 SYMBOLS 1740 SYMBOLS --------------------------------------- --------------- ------------ ÉMPROVEMENTS IN GEOÄEBUGGER Ö2.0: - NEW "HIDDEN MODE": NOW YOU CAN VIEW YOUR APPLICATION'S SCREEN WHILE GIVING COMMANDS TO GEOÄEBUGGER. - GEOÄEBUGGER Ö2.0 WILL RECOGNIZE CALLS TO INLINE ÇÅÏÓ ROUTINES SUCH AS I_ÒECTANGLE, ALLOWING YOU TO SAFELY TOP-STEP OVER AND DISASSEMBLE THESE CALLS. - NEW ÂACKÒAM ÓUPER ÄEBUGGER ALLOWS Ã128 OWNERS WITHOUT A RAM EXPANSION UNIT TO TAKE ADVANTAGE OF THE ÓUPER ÄEBUGGER'S FEATURES. - IMPROVED "CONTEXT SWITCH" IN Ã128 MODE, ALLOWING SINGLE-STEP THROUGH CODE WHICH INVOLVES BANK SWITCHING; ALLOWS EXECUTION AT EITHER 1 ÍÈÚ OR 2 ÍÈÚ CLOCK RATE. - FULL SUPPORT FOR NON-ÇÅÏÓ APPLICATIONS, INCLUDING TECHNICAL NOTES ON HOW TO WRITE AND INSTALL YOUR OWN INTERRUPT SERVICE ROUTINES. - STRAY INTERRUPT TRAPPING FACILITY, TO AID IN ISOLATING RARE CRASH CONDITIONS IN Ã64 AND Ã128 APPLICATIONS. ÓÔÁÃÉ- EXPLAIN HOW THEY GO ABOUT ORDERING THE UPGRADE: - PRICE - WHERE TO SEND CHECK / MONEY ORDER / CREDIT CARD # / ETC - WHETHER OR NOT THEY CAN CALL THEIR ORDER IN - IF THEY MUST SEND THEIR ORIGINAL DISK, OR IF A RECEIPT WILL SUFFICE. (DO NOT ASK THEM TO TEAR THE COVER OFF THEIR MANUAL- THEY WILL STILL NEED THE OLD MANUAL!) - WHO THEY SHOULD CALL WITH QUESTIONS, OR WHERE TO WRITE FOR INFO ON THE UPGRADE OFFER (NOT ME!) Ã128 MODE HAS REAL TROUBLE WITH BITMAPS. ÓEE FILE14&15... ------------------------------------------------------------------------------- ËNOWN (AND ALLOWABLE) DIFFERENCES BETWEEN GEOÁSSEMBLER (ÔED'S) AND GEOÁSSEMBLER (MINE) OUTPUT FILES. ÔÅÄ: ÅÒÉÃ: ----------------------- ----------------------- .ÒÅÌ FILE: ÃODE RECORD ILLEGAL BRANCH: GETS GARBAGE OFFSET OFFSET = $20 ÅXÒEF RECORD: LESS É GENERATE MORE ÅXÒEFS ÒELOC ÒECORD: ÓÙÍ RECORD: +3: ÒELOC BIT: SET FOR ÚÐ LABELS ALWAYS 0 +4: "==" BIT SET FOR "=" EQUATES SET FOR "==" EQUATES .ÅÒÒ FILE: MARGINS IN RULER: OFFSET=+7: =$28 =$30 ------------------------------------------------------------------------------- ÂÕÇÓ: ÄÏÎÅ: - FIXED LINK ICON - CLEANED UP SOME 40/80 COLUMN PROBLEMS IN ÉNIT MODULE - MADE WRITEÂÁÍÔOÄISK A BYTE VARIABLE - ADDED ÐANIC×RITEÎEWÂÁÍÔOÄISK TO ROUTINES WHICH DELETE CHAINS - CLEANED UP 40/80 COLUMN MODE SWITCHING SOME MORE - FIXED LOTS OF MISCELLANEOUS THINGS IN MACRO EXPANSION... - REWROTE HOW MACRO PARAMETERS ARE PARSED FROM DEFINITION LINE, SO THAT CAN DETECT ALL ERROR CASES - REWROTE HOW MACRO ARGUMENTS ARE PARSED FROM INVOCATION LINE, HOW THEY ARE STORED AND SEARCHED. SHOULD HANDLE NULL ARGS, TOO MANY ARGS - FIXED HANDLING OF GLOBAL LABELS WITHIN MACROS- NOW SUBSTITUTES CORRECTLY, HANDLES 8 CHAR SYMBOLS - FIXED BUG IN NESTED MACROS WHICH HAVE GLOBAL LABELS (+1 ERROR) - FIXED HOW ÓEARCHÔABLE DETERMINES LENGTHS OF THINGS IT CAN SEARCH FOR - RE-WROTE TEST FILE #19 (TESTS MACRO DEF AND EXP ERRORS), ADDED A SERIES OF ADDITIONAL TESTS, VERIFIED ALL OUTPUT, PLACED ON TEST DISK Á. - CREATED TEST FILE #75 (TESTS ALL POSSIBLE NON-FATAL ERROR MESSAGES) ÉNCLUDES MOST SCENARIOS WHICH COULD GENERATE THESE ERRORS. VERIFIED ALL OUTPUT, PLACED ON TEST DISK Â. - FIXED "RELOC" FLAG BUG: NOW SETS RELOCATION BITS IN LABELS CORRECTLY - REWROTE HOW LOCAL LABELS AND REFERENCES TO THEM ARE PLACED IN TABLES (CORRECTED BUG WHICH CLEANED UP AFTER ÊÍÐ 10$ INCORRECTLY) - REWROTE HOW INFORMATION IS COLLECTED ABOUT AN OPERAND WHILE IT IS BEING EVALUATED, AND HOW THIS INFORMATION AFFECTS THE POSSIBLE ADDRESSING MODES. ÃORRECTED SEVERAL BUGS HAVING TO DO WITH EXPRESSIONS WHICH CONSIST OF SEVERAL DIFFERENT TYPES OF ARGUMENTS. - EXPRESSION WAS JUDGED AS RELOCATABLE EVEN AFTER MATH - BIT FOR EQUATE WAS SET BY NOGLBL/NOEQIN STATUS - "*" OPERAND DIDN'T SET RIGHT BIT FOR PSECT/RAMSECT - WAS SETTING STATUS:Â3 FOR "ÕNARYÔOGETHER" CASES- WHY? - IMPROPER HANDLING OF ÌÄÁ # AND .ÂÙÔÅ OPERANDS - NOT GENERATING RELOC POINTERS AND EXREFS IN ALL CASES - NOT CATCHING ALL POSSIBLE BRANCH ERRORS (BAD LOCAL LABEL USAGE) - MADE 2 CENTRAL ROUTINES FOR GRABBING ARGS FOR .ÉÆ ETC, .ÂÌÏÃË, .ÐÓÅÃÔ ETC, ETC. - CHANGED THE WAY ÇETÅXPRESSION LOOKS AT "MUSTÅVAL" - REMOVED THE "COMPLEXÅXP" FLAG - REWROTE ERROR DETECTION IN LOCAL LABEL REFERENCES AND DEFINITIONS - NOW CAN FORGET MOST RECENT LOCAL LABEL REFERENCE, FOR CASES WHERE LINE IS BAD (DOES NOT STAMP CODE WHICH IS NOT ASSEMBLED) - CREATED TESTFILE: FILE76_1 TO TEST ALL EXPRESSION PARSING AND ERROR DETECTION; ALSO INCLUDES SOME BRANCHING TESTS - FIXED A LOT OF BUGS RELATED TO USING "*" IN EXPRESSIONS ÃORRECTED EXPRESSION EVALUATOR'S TYPE-CHECKING IN GENERAL CREATED NEW TEST FILE (FILE7) TO TEST THIS - ÏPENÓOURCEÆILE IN ÆILE/FILEÒOUTINES NO LONGER DOES A ÆINDÆILE BEFORE ÏPENÒECORDÆILE. ÓPEED ASSEMBLY A BIT. - SPENT A DAY CHASING FILE14 BUG IN 128 MODE. ÎO LUCK. ËÅÅÐ ÁÎ ÅÙÅ ÏÕÔ ÆÏÒ: ÔHERE MIGHT BE A BUG WITH FILE62 (TOO MANY BACKRAM SYMBOLS) TRY ON STAND-ALONE, SEE IF ÂÏÌÄÆÁÃÅ CHARACTERS GET TRASHED ÉF SO, DISABLE ÄÍÁ ÍOVEÄATA, SEE IF IT STILL HAPPENS ------------------------------------------------------------------------------- ×ARN IN MANUAL: ÉT MAY BE POSSIBLE FOR ASSEMBLER TO HAVE TOO MANY SYMBOLS THAN THE LINKER COULD READ IN FROM ONE .ÒÅÌ FILE. ÂUT IF SOME OF THESE ARE .NOEQIN OR .NOGLBL'ED OUT, WE ARE OK. ×ARN IN MANUAL THAT ÂÎÅ ÓTART+ÓTART WILL NOT ASSEMBLE CORRECTLY, BECAUSE É ASSUME IS SOMETHING OF THE FORM: ÂÎÅ ÓTART+2, WHICH IS LEGAL. ÆILE SELECT Ä WILL DISPLAY ANY APPLICATION DATA FILE WHICH DOES NOT END IN ".REL", ".DBG", ".SYM", ".ERR", ".LNK": THUS IS FASTER THAN BEFORE. ÐROBLEM: WILL DISPLAY GEOÆILE AND GEOÐAINT ETC. DOCUMENTS. ------------------------------------------------------------------------------- ÆÕÔÕÒÅ: ÁDD TO TEST LIST PAGE TOO BIG (4096) ECHO TOO MANY PAGES TOO MANY ERROR PAGES MINOR BUGS FOUND IN FILE75: ÎOT RECOGNIZING "LINE TOO LONG" CORRECTLY ÃOULD NOT GET IT TO PRINT "EXPRESSION TOO COMPLEX" DOES NOT DETECT .RAMSECT AND .INCLUDE IN MACRO DEFINITION SEE ERROR #61- É DID NOT FORCE IT CORRECTLY SEE FILE3: ASSEMBLER IS NOT FLAGGING ERROR FOR ".WORD "ERIC" " Ã128 MODE: INTERMITTENT BUG WHEN TRYING TO ASSEMBLE FILE14 (BIG BITMAP) OFF OF DRIVE Á, ONTO ÒÁÍ ÄÉÓË. ÓOMETIMES GET "DISK NAME MISMATCH" ERROR. Ã128: WHY DID 3208 NOT OVERFLOW SYMBOL TABLE? TABLE HOLDS 3208- É SENT 3208 PLUS 3 ALREADY THERE! ÃREATE A FILE78 WHICH IS A COPY OF FILE75, BUT WHICH TESTS .IF ÐASS1 STUFF. É DID THIS ON 10/1/88, AND HIT A WEIRD PHASE ERROR AT ÇLOBALÌABEL:. É DON'T THINK THIS IS A BIG PROBLEM. ÓLIGHT PROBLEM IN EXPRESSION EVALUATION: PARSES JMP (LABEL) AS RELOCATABLE WITH MATH, SINCE IT HITS THE ENDING PARANTHESES. ÎEED TO EDUCATE GETÅXPRESSION A LITTLE MORE SO THIS DOES NOT HAPPEN. ÔHIS IS NOT A PROBLEM WITH THE (,X) AND (),Y ADDRESSING MODES, BECAUSE THEY MUST HAVE RESOLVABLE ÚÐ EXPRESSIONS, AND SO THEY NEVER GENERATE EXTERNAL REFERENCES. ------------------------------------------------------------------------------- ÄÉÓÔÁÎÔ ÆÕÔÕÒÅ ÍOVE LOCAL LABEL PARSING OUT OF EXPRESSION EVALUATOR: RIGHT NOW THE ERROR DETECTION IS VERY CONFUSED BY CASES SUCH AS LDA 10$+4 LDA 4+10$+6666666666666 LDA 10$+20$+30$ ;THREE REFERENCES ADDED TO LIST, ;ONLY LAST ONE DELETED... ÍINOR PROBLEM: Á LINE SUCH AS .BYTE 1,CRAP,2 WILL STILL GENERATE 3 BYTES OF CODE: WOULD BE NICE TO COMPLETELY REVERSE THE EFFECTS (CODE, Ìà INCS, EXREFS AND RELOCS GENERATED, ETC) OF A CODE LINE WHEN AN ERROR IS DETECTED. ÏTHERWISE THERE IS NO EASY WAY TO HANDLE THIS CASE. ÒELATED PROBLEM: IN CASES WHERE AN ERROR IS DETECTED IN PASS 2 AND ÎÏÔ PASS 1, WE HAVE TO MAKE SURE THE SAME AMOUNT OF CODE IS GENERATED IN BOTH PASSES, SO THAT NO PHASE ERRORS SHOW UP. "ÔOO MANY LOCAL LABEL REFERENCES" IS A GOOD EXAMPLE OF THIS. ÓEE BEGINNING OF ÐARSEÉNST FOR HOW É HANDLED THIS. Ã128 MODE HAS REAL TROUBLE WITH BITMAPS. ÓEE FILE14&15... ------------------------------------------------------------------------------- ËNOWN (AND ALLOWABLE) DIFFERENCES BETWEEN GEOÁSSEMBLER (ÔED'S) AND GEOÁSSEMBLER (MINE) OUTPUT FILES. ÔÅÄ: ÅÒÉÃ: ----------------------- ----------------------- .ÒÅÌ FILE: ÃODE RECORD ILLEGAL BRANCH: GETS GARBAGE OFFSET OFFSET = $20 ÅXÒEF RECORD: LESS É GENERATE MORE ÅXÒEFS ÒELOC ÒECORD: ÓÙÍ RECORD: +3: ÒELOC BIT: SET FOR ÚÐ LABELS ALWAYS 0 +4: "==" BIT SET FOR "=" EQUATES SET FOR "==" EQUATES .ÅÒÒ FILE: MARGINS IN RULER: OFFSET=+7: =$28 =$30 ------------------------------------------------------------------------------- ÂÕÇÓ: ÄÏÎÅ: - FIXED LINK ICON - CLEANED UP SOME 40/80 COLUMN PROBLEMS IN ÉNIT MODULE - MADE WRITEÂÁÍÔOÄISK A BYTE VARIABLE - ADDED ÐANIC×RITEÎEWÂÁÍÔOÄISK TO ROUTINES WHICH DELETE CHAINS - CLEANED UP 40/80 COLUMN MODE SWITCHING SOME MORE - FIXED LOTS OF MISCELLANEOUS THINGS IN MACRO EXPANSION... - REWROTE HOW MACRO PARAMETERS ARE PARSED FROM DEFINITION LINE, SO THAT CAN DETECT ALL ERROR CASES - REWROTE HOW MACRO ARGUMENTS ARE PARSED FROM INVOCATION LINE, HOW THEY ARE STORED AND SEARCHED. SHOULD HANDLE NULL ARGS, TOO MANY ARGS - FIXED HANDLING OF GLOBAL LABELS WITHIN MACROS- NOW SUBSTITUTES CORRECTLY, HANDLES 8 CHAR SYMBOLS - FIXED BUG IN NESTED MACROS WHICH HAVE GLOBAL LABELS (+1 ERROR) - FIXED HOW ÓEARCHÔABLE DETERMINES LENGTHS OF THINGS IT CAN SEARCH FOR - RE-WROTE TEST FILE #19 (TESTS MACRO DEF AND EXP ERRORS), ADDED A SERIES OF ADDITIONAL TESTS, VERIFIED ALL OUTPUT, PLACED ON TEST DISK Á. - CREATED TEST FILE #75 (TESTS ALL POSSIBLE NON-FATAL ERROR MESSAGES) ÉNCLUDES MOST SCENARIOS WHICH COULD GENERATE THESE ERRORS. VERIFIED ALL OUTPUT, PLACED ON TEST DISK Â. - FIXED "RELOC" FLAG BUG: NOW SETS RELOCATION BITS IN LABELS CORRECTLY - REWROTE HOW LOCAL LABELS AND REFERENCES TO THEM ARE PLACED IN TABLES (CORRECTED BUG WHICH CLEANED UP AFTER ÊÍÐ 10$ INCORRECTLY) - REWROTE HOW INFORMATION IS COLLECTED ABOUT AN OPERAND WHILE IT IS BEING EVALUATED, AND HOW THIS INFORMATION AFFECTS THE POSSIBLE ADDRESSING MODES. ÃORRECTED SEVERAL BUGS HAVING TO DO WITH EXPRESSIONS WHICH CONSIST OF SEVERAL DIFFERENT TYPES OF ARGUMENTS. - EXPRESSION WAS JUDGED AS RELOCATABLE EVEN AFTER MATH - BIT FOR EQUATE WAS SET BY NOGLBL/NOEQIN STATUS - "*" OPERAND DIDN'T SET RIGHT BIT FOR PSECT/RAMSECT - WAS SETTING STATUS:Â3 FOR "ÕNARYÔOGETHER" CASES- WHY? - IMPROPER HANDLING OF ÌÄÁ # AND .ÂÙÔÅ OPERANDS - NOT GENERATING RELOC POINTERS AND EXREFS IN ALL CASES - NOT CATCHING ALL POSSIBLE BRANCH ERRORS (BAD LOCAL LABEL USAGE) - MADE 2 CENTRAL ROUTINES FOR GRABBING ARGS FOR .ÉÆ ETC, .ÂÌÏÃË, .ÐÓÅÃÔ ETC, ETC. - CHANGED THE WAY ÇETÅXPRESSION LOOKS AT "MUSTÅVAL" - REMOVED THE "COMPLEXÅXP" FLAG - REWROTE ERROR DETECTION IN LOCAL LABEL REFERENCES AND DEFINITIONS - NOW CAN FORGET MOST RECENT LOCAL LABEL REFERENCE, FOR CASES WHERE LINE IS BAD (DOES NOT STAMP CODE WHICH IS NOT ASSEMBLED) - CREATED TESTFILE: FILE76_1 TO TEST ALL EXPRESSION PARSING AND ERROR DETECTION; ALSO INCLUDES SOME BRANCHING TESTS - FIXED A LOT OF BUGS RELATED TO USING "*" IN EXPRESSIONS ÃORRECTED EXPRESSION EVALUATOR'S TYPE-CHECKING IN GENERAL CREATED NEW TEST FILE (FILE7) TO TEST THIS - ÏPENÓOURCEÆILE IN ÆILE/FILEÒOUTINES NO LONGER DOES A ÆINDÆILE BEFORE ÏPENÒECORDÆILE. ÓPEED ASSEMBLY A BIT. - SPENT A DAY CHASING FILE14 BUG IN 128 MODE. ÎO LUCK. ËÅÅÐ ÁÎ ÅÙÅ ÏÕÔ ÆÏÒ: ÔHERE MIGHT BE A BUG WITH FILE62 (TOO MANY BACKRAM SYMBOLS) TRY ON STAND-ALONE, SEE IF ÂÏÌÄÆÁÃÅ CHARACTERS GET TRASHED ÉF SO, DISABLE ÄÍÁ ÍOVEÄATA, SEE IF IT STILL HAPPENS ------------------------------------------------------------------------------- ×ARN IN MANUAL: ÉT MAY BE POSSIBLE FOR ASSEMBLER TO HAVE TOO MANY SYMBOLS THAN THE LINKER COULD READ IN FROM ONE .ÒÅÌ FILE. ÂUT IF SOME OF THESE ARE .NOEQIN OR .NOGLBL'ED OUT, WE ARE OK. ×ARN IN MANUAL THAT ÂÎÅ ÓTART+ÓTART WILL NOT ASSEMBLE CORRECTLY, BECAUSE É ASSUME IS SOMETHING OF THE FORM: ÂÎÅ ÓTART+2, WHICH IS LEGAL. ÆILE SELECT Ä WILL DISPLAY ANY APPLICATION DATA FILE WHICH DOES NOT END IN ".REL", ".DBG", ".SYM", ".ERR", ".LNK": THUS IS FASTER THAN BEFORE. ÐROBLEM: WILL DISPLAY GEOÆILE AND GEOÐAINT ETC. DOCUMENTS. ------------------------------------------------------------------------------- ÆÕÔÕÒÅ: ÁDD TO TEST LIST PAGE TOO BIG (4096) ECHO TOO MANY PAGES TOO MANY ERROR PAGES MINOR BUGS FOUND IN FILE75: ÎOT RECOGNIZING "LINE TOO LONG" CORRECTLY ÃOULD NOT GET IT TO PRINT "EXPRESSION TOO COMPLEX" DOES NOT DETECT .RAMSECT AND .INCLUDE IN MACRO DEFINITION SEE ERROR #61- É DID NOT FORCE IT CORRECTLY SEE FILE3: ASSEMBLER IS NOT FLAGGING ERROR FOR ".WORD "ERIC" " Ã128 MODE: INTERMITTENT BUG WHEN TRYING TO ASSEMBLE FILE14 (BIG BITMAP) OFF OF DRIVE Á, ONTO ÒÁÍ ÄÉÓË. ÓOMETIMES GET "DISK NAME MISMATCH" ERROR. Ã128: WHY DID 3208 NOT OVERFLOW SYMBOL TABLE? TABLE HOLDS 3208- É SENT 3208 PLUS 3 ALREADY THERE! ÃREATE A FILE78 WHICH IS A COPY OF FILE75, BUT WHICH TESTS .IF ÐASS1 STUFF. É DID THIS ON 10/1/88, AND HIT A WEIRD PHASE ERROR AT ÇLOBALÌABEL:. É DON'T THINK THIS IS A BIG PROBLEM. ÓLIGHT PROBLEM IN EXPRESSION EVALUATION: PARSES JMP (LABEL) AS RELOCATABLE WITH MATH, SINCE IT HITS THE ENDING PARANTHESES. ÎEED TO EDUCATE GETÅXPRESSION A LITTLE MORE SO THIS DOES NOT HAPPEN. ÔHIS IS NOT A PROBLEM WITH THE (,X) AND (),Y ADDRESSING MODES, BECAUSE THEY MUST HAVE RESOLVABLE ÚÐ EXPRESSIONS, AND SO THEY NEVER GENERATE EXTERNAL REFERENCES. ------------------------------------------------------------------------------- ÄÉÓÔÁÎÔ ÆÕÔÕÒÅ ÍOVE LOCAL LABEL PARSING OUT OF EXPRESSION EVALUATOR: RIGHT NOW THE ERROR DETECTION IS VERY CONFUSED BY CASES SUCH AS LDA 10$+4 LDA 4+10$+6666666666666 LDA 10$+20$+30$ ;THREE REFERENCES ADDED TO LIST, ;ONLY LAST ONE DELETED... ÍINOR PROBLEM: Á LINE SUCH AS .BYTE 1,CRAP,2 WILL STILL GENERATE 3 BYTES OF CODE: WOULD BE NICE TO COMPLETELY REVERSE THE EFFECTS (CODE, Ìà INCS, EXREFS AND RELOCS GENERATED, ETC) OF A CODE LINE WHEN AN ERROR IS DETECTED. ÏTHERWISE THERE IS NO EASY WAY TO HANDLE THIS CASE. ÒELATED PROBLEM: IN CASES WHERE AN ERROR IS DETECTED IN PASS 2 AND ÎÏÔ PASS 1, WE HAVE TO MAKE SURE THE SAME AMOUNT OF CODE IS GENERATED IN BOTH PASSES, SO THAT NO PHASE ERRORS SHOW UP. "ÔOO MANY LOCAL LABEL REFERENCES" IS A GOOD EXAMPLE OF THIS. ÓEE BEGINNING OF ÐARSEÉNST FOR HOW É HANDLED THIS. LINKER DOES NOT WARN ABOUT WORD STAMPED INTO BYTE LOCATION: .BYTE ÅXTERN LDA #ÅXTERN ;SEE FILE7 ÇEOÌINKER ÔÈÉÎÇÓ ÔÏ ÄÏ: - CORRECTED BAD ÍOVEÄATA IN ÌINKÈEADER WHICH WAS TRASHING SYMBOL TABLE, CAUSING BAD .ÓÙÍ FILE TO BE CREATED (TO AVOID, DO NOT CREATE CUSTOMIZED HEADER BLOCK) - CORRECTED BUG IN MODULE SWAPPING, WHICH CAUSED PROBLEMS WHEN WRITING .ÓÙÍ FILE TO OTHER DISK (TO AVOID, SET OUTPUT DRIVE = APPLICATION DRIVE) - NOW RUNS GEOÄEBUGGER PROPERLY (HAD BAD PERM NAME) - TESTED .CBM LINK WITH MULTIPLE .REL FILES: WORKS OK - REMOVED WARNINGS ABOUT ÍOVEÂÄATA OVERLAPPING SYMBOL TABLE - FIXED: "SYMBOL DEFINED MORE THAN ONCE"- IS PRINTING FILENAME INSTEAD OF SYM - FIXED: IF SYM ERROR IN HEADER FILE, ERROR MESSAGE FUNNY - FIXED: IF SYM TABLE EMPTY, SEARCHES ALL OF MEMORY FOR SYMBOL - FIXED: PRINTS CORRECT ERROR WHEN HEADER BLOCK WRONG SIZE - FIXED: DOES NOT DELETE OLD FILES WHEN OUTPUT DRIVE NOT INPUT DRIVE - FIXED: SEQ, CBM, AND VLIR .ÏÂÊ FILES SHOULD NOW HAVE CORRECT SIZE. - RE-INSTALLED RESIDENT CODE MUNGING - CLEANED UP SOME 40/80 COLUMN PROBLEMS IN ÉNIT MODULE ÁÆÔÅÒ ÂÅÔÁ 1: ADD FILES TO TEST LIST ÆUTURE: É AM NOT SO SURE THE ÈEX/DECIMAL/OCTAL ETC PARSERS WORK. SAME PROBLEMS IN ASSEMBLER? É MAY HAVE SCREWED UP HOW IT EVALUATES EXPRESSIONS IN .ÍÏÄ STATEMENTS ÓEE ÒESIDENT/GETÌINE, AND A VARIABLE "OPERAND" WHICH DETERMINES WHERE A WORD BOUNDARY IS. ÄÏÎÅ: - REORDERED MODULES - MADE SURE THAT PROGRAM HAS A TOP-LEVEL IN RESIDENT, AND THAT EVERYTHING IS A CALL FROM IT - UPDATED HOW SWAP AND DRIVE ROUTINES WORK - COMBINED ÆILE, ÄRIVE, AND ÃOMPACT MODULES - UPDATED ÇETÆILENAME, WITH CHANGES WE MADE TO GEOÁSSEMBLER - COPIED NEW ÔOÔEXT AND ÔOÂITMAP ROUTINES OVER FROM ASSEMBLER - MOVED SOME INIT CODE TO ÆILE MODULE - MOVED ERROR FILE CREATION TO ÆILE MODULE - REMOVED ALOT OF UNUSED CODE IN EXPRESSION EVALUATOR, REMOVED BUGS - CREATED ÇETÌINEÁND×ORD - ÏPENÁNOTHERÆILE -> ÏPENÒELÆILE - REWROTE HOW ÌÎË FILE IS PARSED MOVED MOST OF IT TO ÆILE REWROTE MID-LEVEL AND TOP-LEVEL PARSING ROUTINES DELETED SOME ERROR MESSAGES, ADDED SOME - UPDATED SCREEN HANDLING - REWROTE HOW SYMBOLS ARE RELOCATED - REWROTE HOW RELOC POINTERS ARE READ IN AND USED - REWROTE HOW EXPRESSIONS ARE READ IN AND USED - REWROTE ROUTINE TO SEARCH SYMBOL TABLES- REMOVED LOT OF EXCESS CODE, POSSIBLY SOME BUGS. SEARCHES 2-3 TIMES FASTER NOW. - SIMPLIFIED HOW SYMBOLS ARE COMPACTED, FIXED, SORTED, AND WRITTEN OUT TO DISK - PLACED ÒES AND ÓWAP TABLES NEXT TO EACH OTHER, COMMENTED OUT ALL BIGÓEQ CODE - ÒÅ×ÒÏÔÅ HOW .ÏÂÊ FILE IS CREATED AND WRITTEN TO, INCLUDING CUSTOM HEADER BLOCK / ÃÂÍ FILE CONSIDERATIONS - REWROTE HOW HEADER BLOCK .ÒÅÌ FILE IS LINKED TO REST OF APPLICATION- HEADER .ÒÅÌ FILE CAN NOW HAVE ITS OWN SYMBOL DEFS, WHICH GO TO SWAP TABLE. - ÒÅ×ÒÏÔÅ HOW LINKER OPENS GEO×RITE OR GEOÄEBUGGER (CODE FROM ASSEM) - BROUGHT NEW ÔOÔEXT AND ÔOÂITMAP CODE OVER FROM GEOÁSSEM - REWROTE ERROR PRINTING ROUTINES - ÒÅÄÕÃÅÄ ÔÏÔÁÌ ÓÉÚÅ ÏÆ ÁÐÐ ÆÒÏÍ 24Ë TO 20Ë - ÒÅÄÕÃÅÄ ÓÉÚÅ ÏÆ ÒÅÓÉÄÅÎÔ ÂÙ 2589 ÂÙÔÅÓ! - DID COMPLETE WALK-THROUGH OF NEW CODE, MAKING SURE THAT DISK AND USER ERRORS CAUSED THE RIGHT THING TO HAPPEN - FINAL WORK ON FILE CREATION/DELETION STUFF - RE-INSTALLED ÓÔÏÐ KEY CHECKS - ADDED ÃHECKÄISKÅRROR CALLS THROUGHOUT PROGRAM - ADDED CODE TO SET FILENAME POINTER IN CASE ERROR OCCURS - ADDED NEW ERROR DIALOG BOX: PRINTS FILENAME, ERROR, ALLOWS ÃÁÎÃÅÌ - ADDED CODE TO DELETE OUTPUT FILES CORRECTLY ON ERROR, DISPLAY SECOND Ä IF SECOND DISK ERROR - NUKED ERROR MESSAGE POINTER TABLE TO SAVE BYTES IN RESIDENT - ÒÅ×ÒÏÔÅ HOW WE CREATE THE .ÅÒÒ FILE MADE SURE RULER AND VERSION # ARE ÏË - ÒÅ×ÒÏÔÅ HOW WE CREATE THE .ÄÂÇ FILE - MODIFIED HOW WE CREATE THE .ÓÙÍ FILE- DOES THIS NEED ANY WORK? DON'T FORGET TO TEST INSTALLATION WITH 1571 DRIVE! ÔHINK ABOUT 2 DIFFERENT PHYSICAL DRIVES ON NON-ÒÅÕ SYSTEM: WILL ÇÅÏÓ TELL ME THAT DRIVER DOES NOT EXIST, OR WILL É CRASH? ÂUG: 1571 AS Á, 1581 AS Â, RUN DEBUGGER ON Â, TRY TO SELECT DRIVE Á, AND SINCE THERE IS NO ÒÅÕ, ÇÅÏÓ ÓETÄEVICE DOES NOT WORK. ÄOES IT RETURN ERROR CONDITION TO DEBUGGER? OR JUST CRASH... ÂUGS IN ÔUESDAY (6/21) 12ÐÍ VERSION: STOP COMMAND IN HIDDEN MODE DOES NOT DO THE RIGHT THING! CHANGE NOTES IN GET INFO BOX ÂUGS IN THU (6/16) 4ÐÍ VERSION: FIXED: ÓÅÔÕ U.E2 COMMAND DOES NOT CLEAR HIGH BITS! FIXED: ÓÙÍ R0Ì FINDS R0 ALSO! FIXED: GETN COMMAND IS READING DISK INFO FROM BANK 0! FIXED: IN RBOOT, QUIT, AND EXIT COMMANDS, PRESSING Æ8 SCREWS UP LINE FIXED: STOP COMMAND DOES NOT CANCEL HIDDEN MODE ANYMORE FORGET: @# OPERATOR DOES NOT TAKE IN-LINES INTO ACCOUNT INVESTIGATED: WE CANNOT PROTECT ALL OF É/Ï SPACE WARN IN MANUAL: IN ÂACKÒAMÓUPER (AND HAVE ÒÅÕ), SHOW ÇÅÏÓ SCREEN WHEN TOP-STEPPING THROUGH ÍOVEÄATA, BECAUSE IT USES ÄÍÁ TO MOVE SMALL THINGS. (ÔHEY COULD DISABLE ÍOVEÄATA IN CONFIGURE TO BE SURE. ÁLSO WARN THAT AN ÒÂÏÏÔ BRINGS BACK OLD ÍOVEÄATA/ÒÂÏÏÔ FLAG VALUES.) ÂUGS IN EARLIER VERSIONS: FIXED: SETU SS,0 PLACES CURSOR WRONG FIXED: PRINT @ SIGN WHERE Ðà SHOULD GO FIXED: NOT DELETING ÓÂÐ'S CORRECTLY FIXED: TRASHES Ø (AND OPEN MODES) WHEN SETTING ÓÂÐS TO ÒÁÍ FIXED: DOES NOT LOAD ÃÂÍS WITH HEADER CORRECTLY FIXED: $03ÆÃ-$03ÆÆ STILL TREATED DIFFERENTLY FIXED: IN 64 MODE, IS NOT TRACKING BANK INFO WITH ÓÂÐS CORRECTLY FINISH NOW WORKS WITHIN INLINE CALL CLEANED UP ÆETCHÉNST USAGE N COMMAND WILL NOW SET FINAL Ìà CORRECTLY IF LAST LINE IS INLINE ÊÓÒ FIXED ÆINDÎEXT: Í MODE SHOULD NOW IGNORE INLINE STUFF CHECK UP AND DOWN IN BOTH MODES, CHECK REG, FLAG, OPT, ETC CORRECTED "×": NOW USES ÆINDÎEXT, SO SHOULD WORK. FIXED ÊÓÒ COMMAND TEST: BOOT APP AND TRY ÊÓÒ $400: SHOULD COME BACK TO US BEFORE GOING OFF TO ÇÅÏÓ MAINLOOP FIXED SKIP COMMAND: TAKES BANK INTO ACCOUNT FIXED DIFF AND COPY COMMANDS FIXED Æ8 IN MINI DEBUGGER RIGHT-SIDE PROMPT BUG FIXED LOAD ÃÂÍ APP WITH HEADER BUG FIXED $3ÆÃ-$3ÆÆ BUG FIXED BANK INFO COMPARISONS ADDED É AND Ò PRINTING TO OPEN COMMAND PRINTS ERROR IF TRY TO SET ÂÐ IN ÒÏÍ OR ÉÏ FIXED ÉÏ AREA DECODE BUG ($Ä022) CLEANED UP INIT CODE: ZEROED ALL VARS AT START, SAVED LOTS OF BYTES FIXED ÓTUFFÂÒËÁTÌÓÁ BUG WHICH É CREATED YESTERDAY! ------------------------------------------------------------------------------ ÍAJOR CODE SECTIONS: ------------------------------------------------------------------------------ ÆOR ÔEST ÌIST: GOOD TEST FOR Ã64 VERSION: CHECK TO SEE IF $ÆÆ00 AND $Ä506 ARE CHANGING SPECIAL ASSIGNMENTS FOR ÂETA ÔESTERS? SINGLE STEPPING THROUGH DIFFERENT BANKS MEMORY ACCESS TESTS SYMBOL TABLE USE MACRO DEFINITION USE ------------------------------------------------------------------------------ ÎEW ÃONCERNS: WHAT IF IN 64 MODE THEY SWAP ÒÏÍ IN AND USE DEBUGGER ÇETÂLOCK? ------------------------------------------------------------------------------ ÔHINGS ÔO ÒESEARCH: ÒÅÓÅÔ EXECUTES ÒÏÍÓ, BUT DO THEY CHECK ÒÁÍ? ÂANK 0 ÐAGE 3 ISSUES: É FILL FIRST WITH $00 AND THEN WITH $ED, AND DESKÔOP AND ICON EDITOR HAD NO PROBLEMS RUNNING. CANNOT LOAD OTHER DESK ACCESSORIES? EASY WAY TO LOAD DRIVERS? ???CONVERT TABS FOUND IN MACRO DEFS ???ÄÉÒ SAVE ÐÃ? ÉNITÆORÉÏ TRASHES $314 AREA VECTORS- ÙÅÓ: $314 AND $318 (ÉÒÑ AND ÎÍÉ) ------------------------------------------------------------------------------ ÎOT CONCERNED WITH: DEBUGGER ASSUMES ALL GEO×RITE VERSIONS ABOVE 1.1 ARE THE SAME. 64 MODE ON Ã128: CAN SET FOR 2ÍÈÚ? ÒÅÓÔÏÒÅ KEY BOUNCES! ÇENERATES TWO ÎÍÉ SIGNALS, SPACED ABOUT 200 USEC APART ------------------------------------------------------------------------------ ÌOW ÐRIORITY: ÕSER COMPLAINT: HIS PROGRAM RAN UNDER ÄÇÂ, CRASHED UNDER ÇÅÏÓ. ÈE HAD FORGOTTEN TO PUT A DUMMY ICON UP. ÐOSSIBLY RELATED TO DEBUGGER CLEARING MEMORY. ÓHOULD NOT ALLOW USER TO LOAD APPLICATION WHICH TRASHES ÍINIÄEBUGGER IN MEMORY OR WHICH WOULD TRASH ÇÅÏÓ ADD OPTION TO DISABLE ÇÅÏÓ ÄISK USAGE? (SO THEY WON'T DO THE WRONG THING WHEN DEBUGGING GAMES) ADD DETECTION FOR TRASHED ÇÅÏÓ? (WOULD FORCE RBOOT ON EXIT) READ OPTION PRESETS FROM VALUE OF ÏÐÔÉÏÎÓ CONSTANT IN SYMBOL TABLE AFTER USER HAS TRASHED MEMORY, SHOULD BOOT ÇÅÏÓ FROM DISK... OPTION TO ALLOW THEM TO USE ÂÒË AS AN INSTRUCTION (GET TO THEIR VECTOR) ------------------------------------------------------------------------------ ÆOR ÍANUAL: MINOR: HOLDING MOUSE BUTTON LOOKS LIKE RUN/STOP DURING BOOT THEIR ÉÒÑ SERVICE ROUTINE MUST FINISH WITH AN ÒÔÉ BECAUSE OF THE WAY THINGS ARE PUSHED... ÄEBUGGER WILL NOT LOAD THEIR ÇAME OVER ÇÅÏÓ: ÇAME MUST CALL ÇÅÏÓ ROUTINES TO GET THE REST OF IT IN (THIS IS WHAT DESKÔOP WOULD REQUIRE ANYWAY.) PLACES ÂÒË AT ÒSTRÁPPL IF IS RUNNING DESK ACCESSORY MENTION "ÐRESS ÒÅÓÔÏÒÅ SHARPLY" IN MANUAL $Ä506 AND $ÆÆ00 SHADOWED R.MM NUKED COMPLETELY. Ò COMMAND NO LONGER SHOWS ÍEMÍAP SCREEN FLICKER DURING STEP IS DUE TO POOR ÇÅÏÓ 128 INTERRUPT CODE HOLDING KEY DOWN WHEN DEBUGGER STARTS WILL FORCE ERROR ON FIRST LINE USER MAY WANT TO CHANGE R COMMAND: CREAT MACRO WHICH DOES Ò AND ÂÁÎË. USER CAN CHANGE Ðà MEM MAP DIRECTLY BY ACCESSING FF00 AND D506 IF USER'S CODE UPDATES SCREEN REGISTERS, BUT DEBUGGER SCREEN IS VISIBLE, THEN WHEN DEBUGGER KICKS IN IT WILL ASSERT ITS VALUES, LOSING THE USER'S NEW VALUES. ×ARN THEM TO ENABLE TARGET SCREEN BEFORE EXECUTING SUCH CODE. SEE ÓPECS/USERÎOTES FOR MORE... ------------------------------------------------------------------------------ ÁSSUMPTIONS: ÇÅÏÓ 128 HAS SAME $FFFA VECTORS IN Â1 AND Â0. É ASSUME THIS TO BE TRUE FOR ALL FUTURE VERSIONS. ------------------------------------------------------------------------------ ÓAVE ÂYTES: MINI DEBUGGER DOES NOT HAVE TO BE AS CAREFUL ABOUT SCREEN STUFF IN RESIDENT: COMPACT THAT DAM ÄRIVE ICON! ------------------------------------------------------------------------------ ÆUTURE: DO NOT EXECUTE ILLEGAL INSTRUCTIONS COULD CUSTOMIZE DEBUGGER ACCORDING TO 64/128 MODE ÒÅÕ AS TRACE BUFFER? DON'T ALLOW TWO MACROS OF SAME NAME IN MACRO FILE WRITE OUT MACRO FILE ADD MODULES TO DEBUGGER FOR MORE FEATURES SENSE USER'S MODULE SWAP AND CORRECT ÓÂÐS? COULD SAVE Â1/Â0 INFO IN SYMBOL TABLE TO FURTHER REDUCE CONFLICTS MEMORY RANGE COMMANDS COULD EASILY MOVE DATA FROM BANK TO BANK COMMANDS LIKE × WILL NOT WORK IF PRINTING IS OFF, BECAUSE ÄISPLAYÌOCATION IS NEVER CALLED, BYTES NEVER READ, POINTERS NEVER MOVED. ÔHIS COULD BE CLEANED UP. CLRB IS NOW CRIPPLED BECAUSE IT RELIGIOUSLY CHECKS FOR EXACT BANK INFO WHEN SEARCHING THE ÓÂÐ LIST. ÃOULD REMOVE THIS RESTRICTION TO MAKE THE CLRB COMMAND EASIER, BUT THEN TRYING TO REMOVE A DOUBLE-ÓÂÐ (BANK1 AND 0, SAME ADDR) USING AN OPEN MODE WOULD BE IMPOSSIBLE. ÁCTUALLY, THERE IS A DEEPER PROBLEM WITH THE WAY WE STORE BANK INFO WITH ÓÂÐS IN THEIR TABLE: WE SHOULD JUST STORE THE EFFECTIVE BANK DIFFERENCE, NOT THE 16 BITS OF INFO. ÉF THE SETB COMMAND IS CHECKING FOR EXACT MATCHES WHEN IT INSERTS A NEW ÓÂÐ, THEN YOU COULD HAVE SEVERAL "EQUAL" ÓÂÐS IN THE SAME TABLE. ------------------------------------------------------------------------------ ÆINISHED: 40/80 COLUMN TEXT BITS AND CENTERING STUFF, MOVED TO ONE FILE, STANDARDIZED Ä TEXT POSITIONS (WILL HELP APPLE PORT) MACRO LOAD BUGS, EXTENSIVE ERROR CHECKING, PAGE/LINE # BUGS SYMBOL LOAD BUG INFO BOX CODE: DISPLAYS STATUS MESSAGES AS FILES LOAD ÓÔÏÐ KEY BUG BUGS IN LOADÓAVEÂYTE ERROR CHECKING DURING SYMBOL TABLE LOADS LOADS DEFAULT.DBM EVEN IF NO FILENAME GIVEN NEED ÒESÐREPÆORÑUIT EXTENSIVE ERROR CHECKING DURING MODULE SWAPS, DEBUGGER LOADS, AND FILENAME SELECTION (INCLUDING PRINTING CURRENT FILENAME DURING ERROR) ADDED MEMORY Ò/× CHECKS FOR $ÆÆ01-$ÆÆ04 PAGE # IN MACRO FILE LOADS FIXED 80 COLUMN SCROLL BUG ÒESÐREPÆORÑUIT RESTORES USER'S SCREEN, NOT BE SAME AS ÇÅÏÓ SCREEN CLEAR PENDING INTERRUPT BEFORE STEPPING TEST NEW ÌÃÒÁ-ÌÃÒÄ STUFF INVERTS ADDRESSES IF DISPLAYING BANK #0 ADDRESS ÇETÂLOCK, ÐUTÂLOCK: CALL BANK 1 ROUTINE, DISPLAY BANK 1 DATA ÊÓÒ DOES WORK IN EITHER BANK (BECAUSE IS LIKE A TOP-STEP) ÒÅÕ CHECK UNDER ÇÅÏÓ Ö1.2 TEST RBOOT IN ALL 5 CONFIGS Ã64 MODE! BANKÉNFO1/2 VARIABLE: CARRIES INFO IN 64 AND 128 MODES CALL ÇET1STÄIRÅNTRY, USE R5, CALL GETÎXTÄIRÅNTRY - NEED TWO NEW PRIMITIVES - CHANGE DIR MACRO TRACKED DOWN SCREEN FLICKER BUG (IS ÇÅÏÓ 128 INTERRUPT CODE!) - IMPLEMENTED NEW 3-LEVEL ÎÍÉ ENABLE/DISABLE CODE - FOUND BUG IN 128 ÇÅÏÓ ÉNITÆORÉÏ - ADDED ÃÉÁ2 ÎÍÉ HANDLING - WROTE DOCUMENTATION ON STRAY INTERRUPT TRAPPING - WROTE ROUTINES SO USER'S APPLICATIONS CAN SET INTERRUPT SERVICE ROUTINE VECTORS CORRECTLY WHEN RUNNING UNDER ÇEOÄEBUGGER - DOCUMENTED VECTORS IN ÇEOÄEBUGGER WEDGE CODE WHICH ARE USEFUL - FIXED "LDA Á000" PARSE BUG - FIXED SYM SEARCH BUG - FIXED BUG IN STOPMAIN - FIXED DISASSEMBLY BUG: NOW DISPLAYS CODE WHEN CANNOT FIND LABEL MACRO ERROR BUG STOP KEY BUG CIA1 DDR ASSERTION RTI BUG CENTERING ÌDÆILE USAGE BUG FILE INIT ADDRESS BUG EXIT AFTER DISK ERROR CORRECTED SELECT FILE Ä ICONS, SCROLLING BUG FILE Ä SELECTION AREA SETU / PR U.E1 BUG DIR / GETBLOCK FROM ÒÁÍ ÄÉÓË BUG FLAGS ON BOOT BUG ÒÂÏÏÔ MORE INTELLIGENT IGNORES ÓÔÏÐ KEY IN LEFT-SIDE MODE REWROTE SOME PRINTING ROUTINES ADDED NEW ÈÉÄÅ FEATURE CORRECTED 128 MODE KEYBOARD SCAN PROBLEM ADDED KERNAL CHECKING TO ÇET1STÄIRÅNTRY/ÇETÎXTÄIRÅNTRY AND MADE SOME CORRECTIONS DISPLAY COPYRIGHT MESSAGES DISPLAY DISK NAME WHEN SELECTING FILE TOP-STEP THROUGH INLINE CALLS DISASM UP AND DOWN THROUGH INLINE CALLS PAGE 3 CODE ASSERTS VALUE OF $0000 TO $2Æ DUMPD COMMAND SETS Ìà TO Â1$8100 CORRECTED ÇETÂLOCK/ÐUTÂLOCK CORRECTED DISK AND DRIVEA/B COMMANDS CORRECTED ÐRINTÄISKÎAME COMMAND REWROTE WAY THAT THE 3 MONITORS READ/WRITE/SWAP MISC. ÇÅÏÓ VECTORS AND VARIABLES JUST FIXED 64 MODE BUG, MADE TABLE SHORTER USING Ý OPERATOR BACKRAM SUPER SHOULD DISABLE ÄÁ LOADS ------------------------------------------------------------------------------ ÆÉÌÅÓ ÉÎ ÔÈÉÓ ÄÉÒÅÃÔÏÒÙ /STAFF/JIM/GEOS/ÐÒÏÄÕÃÔÓ/GEOÐROG/GEOÄEBUG/ÓPECS ÕSEFUL: ÉNITÆORÉÏÂUG: DETAILED INFO ON Ã128 ÉNITÆORÉÏ BUG ÒÅÕÎOTES: FULL DOC ON ÇÅÏÓ ÒÅÕ USAGE AND HOW WE USE IT ÒÅÕBUGS: HOW TO WARN USER THAT ÄÍÁ USES ÖÉà BANK INFO APPÔYPES: INFO ON HOW DESKÔOP AND DEBUGGER LOAD APPLICATIONS MEMÐROTECT: DETAILED SPEC OF HOW DEBUGGER'S LOADÓAVEÂYTE ROUTINE WORKS CBMÁPPS: INFO ON HOW TO USE PRODUCT TO DEVELOP ÃÂÍ APPLICATIONS HIDEÍODE: ALL ABOUT THE NEW HIDE DEBUGGER SCREEN FEATURE INTERRUPTS: NOTES TO USER ABOUT INTERRUPTS NMI: NOTES ON ÎÍÉ INTERRUPTS, ÒÅÓÔÏÒÅ BOUNCE, ETC RBOOT×ARN: WARNING ABOUT RBOOT COMMAND, KNOWN PROBLEMS VIEWÃOMMAND: HOW NEW VIEW COMMANDS WORK ENVIRONMENT: VIEW COMMANDS- DECISIONS MADE WISHÌIST: IDEAS... ÎOT USEFUL: 128IDEAS: GENERAL IDEAS ON INSTALLING USER'S ÉÓÒ TRAPPING STRAY INTERRUPTS 40/80 COLUMN SCREEN USAGE ON 128 MEMORY MAP REGISTERS, CLOCK SPEED, KEYBOARD ÉNITÉNTÓVC2.OLD: OLD ÉÓÒ INSTALL INFO ÍÉÎÉ: THINGS NUKED IN ÍÉÎÉ DEBUGGER TO SAVE SPACE ÓÐÅÃÓ: OUTLINE FOR PRODUCT SPECIFICATION ASSEMÉNÂASIC: HOW TO USE GEOÌINKER TO CREATE ÂÁÓÉà APPS BOOT: OLD OUTLINE OF DEBUGGER BOOT SEQUENCE DESIGNÄECISIONS: DECISIONS MADE ALONG THE WAY PROBLEMS: UNRESOLVED PROBLEMS IN THE DESIGN CONTEXTÓWITCH: INFO ON HOW Ã64 / Ã128 INTERRUPTS WORK, AND HOW DEBUGGER'S CONTEXT SWITCH WORKS WITH THEM WARNINGS: PROBLEMS IN THE DESIGN FOR WHICH NO SOLUTION EXISTS SCREENÄECISIONS: DECISIONS MADE IN DESIGN OF Ö2 SCREEN ROUTINES Ã128 ÉNITÆORÉÏ BUG? ÏN BOTH THE 64 AND 128, THE ÃÉÁ2 CHIP HAS THE CAPABILITY OF GENERATING AN ÎÍÉ SIGNAL. ÔO PREVENT THIS FROM OCCURING DURING DISK-ACCESS ROUTINES, THE ÇÅÏÓ ÉNITÆORÉÏ ROUTINE FORCES THE ÃÉÁ2 TO GENERATE ONE INTERRUPT BY SETTING THE ÃÉÁ TIMER VALUE TO A LOW NUMBER LIKE 1. ÉNITÆORÉÏ KNOWS THAT IT WILL GET CONTROL WHEN THIS FORCED-ÎÍÉ OCCURS BECAUSE IT SWAPS THE KERNAL ÒÏÍ INTO THE HIGH-MEMORY AREA AND SETS THE KERNAL'S PAGE 3 ÎÍÉ VECTOR (NMIVEC, $0318) TO POINT TO A DUMMY ÎÍÉ ROUTINE. - ON THE Ã64, THIS WORKS FINE, EXCEPT FOR THE FACT THAT ÉNITÆORÉÏ IS TRASHING ANY ÎÍÉ VECTOR THAT THE APPLICATION WRITES TO $0318. - ON THE Ã128, ÉNITÆORÉÏ DOES NOT SWAP ÒÏÍ IN CORRECTLY (IT IS CHANGING LOCATION $0001). ÓO WHEN IT FORCES THIS ÎÍÉ TO OCCUR, THE 6510 USES THE VECTOR AT Â1$ÆÆÆÁ OR Â0$ÆÆÆÁ, WHICH NORMALLY POINT TO THE ÇÅÏÓ ÎÍÉ HANDLER ROUTINE, WHICH SIMPLY DOES AN ÒÔÉ. ÉF AN APPLICATION CHANGES THE ÇÅÏÓ ÎÍÉ VECTORS AT Â0$ÆÆÆÁ AND Â1$ÆÆÆÁ, THEN THE USER'S HANDLER ROUTINE WILL GET CALLED EVERY TIME ÉNITÆORÉÏ IS CALLED. ÔHE USER'S HANDLER ROUTINE SHOULD POLL THE ÃÉÁ CHIP AND RETURN IMMEDIATELY IF THE ÎÍÉ WAS GENERATED BY THE ÃÉÁ. ÉF THE USER IS EXPECTING ÎÍÉS FROM THE ÃÉÁ CHIP, THEN THIS "POLLING" PROCESS MUST ALSO INCLUDE AN EXAMINATION OF THE STACK TO SEE IF ÉNITÆORÉÏ IS IN PROGRESS... ÃONCLUSION: ÄUE TO THE FACT THAT ÉNITÆORÉÏ MAKES SOME ASSUMPTIONS ON THE Ã128, USERS WHO WRITE THEIR OWN ÎÍÉ HANDLER ROUTINE WILL HAVE TROUBLE. ÐOSSIBLE FIXES: Ã64 AND Ã128 ÉNITÆORÉÏ SHOULD BOTH BRING ÒÏÍ IN, AND SHOULD BOTH SAVE THE ÎÍÉ VECTOR AT $0318 (BANK 0 ON THE 128), AND RESTORE IT LATER. ÔHIS WOULD MAKE ÉNITÆORÉÏ WORK ALL THE TIME (REGARDLESS OF WHAT THE USER HAS DONE TO THE VECTORS) AND IT WOULD NOT AFFECT THE APPLICATION'S VECTORS. 1764/1700/1750 ÒAM ÅXPANSION ÕNITS ---------------------------------- 1764: 128Ë 2 64Ë BANKS, INTENDED FOR Ã64 CAN BE EXPANDED TO 512Ë 1ST 64Ë BANK: ÇÅÏÓ SYSTEM STUFF. 2ND BANK UNUSED. 1700: 256Ë 4 64Ë BANKS, INTENDED FOR Ã128 CAN BE EXPANDED TO 512Ë 1ST 64Ë BANK: ÇÅÏÓ SYSTEM STUFF. 2ND - 4TH BANKS: 1541 ÒÁÍ ÄÉÓË OR 1541 DISK SHADOW. 1750: 512Ë 8 64Ë BANKS, INTENDED FOR Ã128 CAN BE MADE TO WORK ON Ã64 1ST 64Ë BANK: ÇÅÏÓ SYSTEM STUFF. 2ND BANK UNUSED. 2ND - 8TH BANKS: 1541/1571 ÒÁÍ ÄÉÓË OR 1541/1571 DISK SHADOW. ÒÅÕ ÂANK #0: (1ST BANK) ÂANK #0 IS RESERVED FOR ÇÅÏÓ KERNAL USE. ÇÅÏÓ WILL, HOWEVER, HONOR SOME ENABLE BITS IN SYSÒÁÍÆLG AND ITS' SHADOW VARIABLE SYSÆLGÃOPY. ÂY CLEARING SOME OF THESE BITS, YOU CAN PREVENT ÇÅÏÓ FROM USING CERTAIN AREAS, AND THEN YOUR APPLICATION CAN USE ÓTASHÒÁÍ, ÆETCHÒÁÍ, ETC TO STUFF DATA UP THERE. Ã128 64 ÇÅÏÓ 128 ÇÅÏÓ ÃONTROL BIT ----------------------- ----------------------- ------------- $0000 - $38ÆÆ ÍOVEÄATA SWAP AREA ÍOVEÄATA SWAP AREA 1ØØØØØØØ $3900 - $78ÆÆ ÍOVEÄATA SWAP AREA ÇÅÏÓ KERNAL FOR ÒÂOOT NOTE 1 $7900 - $7ÄÆÆ ÔOÂASIC CODE ÔOÂASIC CODE ØØ1ØØØØØ $7Å00 - $82ÆÆ ÇÅÏÓ KERNAL FOR ÒÂOOT ÇÅÏÓ KERNAL FOR ÒÂOOT ØØ1ØØØØØ $8300 - $Â8ÆÆ ÄEVICE DRIVERS Á, Â, à ÄEVICE DRIVERS Á,Â,à Ø1ØØØØØØ $Â900 - $ÆÃ3Æ ÇÅÏÓ KERNAL FOR ÒÂOOT ÇÅÏÓ KERNAL FOR ÒÂOOT ØØ1ØØØØØ $ÆÃ40 - $ÆÆÆÆ ??? ??? ??? ÎOTE 1: DIFFERENT FOR 64/128. ÒÅÕ ÂANKS 1 THROUGH 7: ÕSED BY DEVICE DRIVERS FOR ÒÁÍ ÄÉÓË AND SHADOWING. ÉT IS A REAL BAD IDEA TO TOUCH THESE BANKS. ------------------------ ÒÅÕ ÄÍÁ ÎÏÔÅÓ: DISABLE SHARING WHEN USING ÒÅÕ ÄÍÁ RELOCATION HIGH BYTE: ONLY Â0 R/W CAPABLE, MUST WRITE TO LOW BYTE BEFORE CAN READ INFO BACK FROM HIGH BYTE (INDICATING RELOCATION IS ACTIVE) ÍIGHT BE ABLE TO USE THIS TO DECIDE WHETHER OR NOT ÎÍÉ OCCURRED WHILE SOMEONE WAS STUFFING VALUES IN THESE REGISTERS. ------------------------ ÍATT: É GUESS IT IS REALLY ONLY 1 BUG, AND IT IS NOT A BUG IF THE USER IS USING THE STANDARD ÇÅÏÓ SCREEN FOR DISPLAY, AND IS NOT TRYING TO ÄÍÁ DATA TO BACKRAM (BANK 0). ÔHERE ARE A NUMBER OF CONCERNS WHEN USING THE ÒÅÕ'S ÄÍÁ CHIP ON A Ã128: 1) THE CLOCK MUST BE SLOW (1ÍÈÚ, NOT 2ÍÈÚ) 128 ÇÅÏÓ HANDLES THIS CORRECTLY. 2) THE ÉÏ SPACE MUST BE IN, SO YOU CAN ACCESS THE ÄÍÁ CHIP (BIT 0 OF $FF00 "CONFIG" MUST BE A 0) UNDER 128 ÇÅÏÓ, THE ÉÏ SPACE IS ALWAYS IN. 3) WHEN THE ÄÍÁ CHIP FORMS AN ADDRESS FOR WHERE IN THE Ã128'S 128Ë TO READ AND WRITE, IT IGNORES THE STANDARD BANK 0 / BANK 1 SELECTION CONTROLS AND THE "BANK SHARING" CONTROLS. ÔHESE CONTROLS É AM TALKING ABOUT ARE BITS 7 AND 6 OF $ÆÆ00 (CONFIG) AND BITS 5 THROUGH 0 OF $Ä506 (ÒÃÒ) IN THE ÉÏ SPACE. ÔHE ÄÍÁ CHIP KNOWS WHICH OF THE TWO 64Ë BANKS TO USE BECAUSE IT USES THE SAME BANK 0 / BANK 1 CONTROL LINE THAT THE ÖÉà CHIP USES. ÔHIS CAN BE USEFUL: NO MATTER WHAT BANK SETUP YOU HAVE FOR THE 8510 PROCESSOR CHIP, YOU CAN HAVE THE ÄÍÁ CHIP READ/WRITE TO ANYWHERE IN EITHER BANK. ÎOW DEPENDING ON WHICH BANK THE ÖÉà CHIP IS LOOKING AT AND WHICH BANK YOU WANT TO Ò/× TO, YOU MAY HAVE TO CHANGE THE ÖÉà CHIP BANK # SETTING TEMPORARILY (WILL CAUSE SCREEN TO FLASH). ÃODE TO DO THIS: (ASSUMES R0-R3Ì HAVE ALREADY BEEN SET UP FOR ÓTASHÒÁÍ) ;FIRST, É ASSUME ÉÏ SPACE IS IN, BECAUSE UNDER ;128 ÇÅÏÓ, $ÆÆ00 = $7Å, MEANING ÉÏ IS IN. LDA MMU+6 ;GET "ÒAMÃONTROLÒEGISTER" PHA ;SAVE CURRENT BANK SHARING ;STATUS AND ÖÉà BANK # INFO ;ON STACK AND #%00111111 ;KEEP Â5-Â0 INTACT ORA #ÂÁÎË << 6 ;SET ÂIT 6 ACCORDING TO BANK WE ;WANT ÖÉà AND ÄÍÁ CHIPS TO SEE STA MMU+6 ;SAVE NEW ÖÉà BANK # INFO JSR ÓTASHÒÁÍ/ÆETCHÒÁÍ ETC... ;CALL ÇÅÏÓ TO TURN ON ÄÍÁ CHIP PLA ;RESTORE ÖÉà BANK # STA MMU+6 ÃOMMODORE 64/128 ÇÅÏÓ ÆILE TYPES, AND IF THE DESKÔOP AND/OR GEOÄEBUGGER CAN LOAD THEM. ÃÂÍ ÇÅÏÓ ÏPEN FROM TYPE FILE TYPE DESKÔOP ÄESCRIPTION ---- --------------- ------- --------------------------------------- ÄÅÌ ANYTHING NO ÄELETED FILE ÓÅÑ ÎÏÔ_ÇÅÏÓ NO ÃOMMODORE SEQUENTIAL DATAFILE, PROBABLY GENERATED BY ÂÁÓÉà PROGRAM. ÓÅÑ ÄÁÔÁ NO ÓAME AS ABOVE, WITH HEADER ADDED BY ÉCON ÅDITOR. ---- --------------- ------- ------------------------------------------------ ÐÒÇ ÎÏÔ_ÇÅÏÓ YES *1 ÃOMMODORE ÂÁÓÉà OR ASSEMBLY PROGRAM. ÉF THE FILE IS A ÂÁÓÉà PROGRAM, THEN IT WAS PROBABLY CREATED USING Ã64 OR Ã128 ÂÁÓÉÃ'S "ÓÁÖÅ" COMMAND. ÔHE DESKÔOP CAN ALWAYS LOAD SUCH A PROGRAM, AND IN SOME CASES CAN ÔURBO-LOAD IT. ÉF THE FILE IS AN ASSEMBLY-LANGUAGE PROGRAM, THEN IT WAS PROBABLY CREATED USING AN ASSEMBLER UTILITY, OR USING Ã128 ÂÁÓÉÃ'S "ÂÓÁÖÅ" COMMAND. ÐÒÇ ÂÁÓÉà YES *2 ÃOMMODORE ÂÁÓÉà PROGRAM, WITH HEADER BLOCK ATTACHED BY ÉCON ÅDITOR. ÉF PROGRAM IS LESS THAN 31Ë IN SIZE, THE DESKÔOP WILL HAVE ÇÅÏÓ ÔURBO-LOAD IT. ÐÒÇ ÁÓÓÅÍÂÌÙ YES *3 ÃOMMODORE ASSEMBLY PROGRAM, WITH HEADER BLOCK ATTACHED BY ÉCON ÅDITOR. ÉF PROGRAM LOADS TO APPLICATION SPACE ($400-$7ÆÆÆ), THEN THE DESKÔOP WILL HAVE ÇÅÏÓ ÔURBO-LOAD IT. ---- --------------- ------- ------------------------------------------------ ÕÓÒ ÎÏÔ_ÇÅÏÓ NO ÏLD ÃOMMODORE "USER" FILE. ÕÓÒ ÂÁÓÉà NO ÉÌÌÅÇÁÌ ÃÏÍÂÉÎÁÔÉÏÎ ÕÓÒ ÁÓÓÅÍÂÌÙ NO ÉÌÌÅÇÁÌ ÃÏÍÂÉÎÁÔÉÏÎ ÕÓÒ ÄÁÔÁ NO ÉÌÌÅÇÁÌ ÃÏÍÂÉÎÁÔÉÏÎ ÕÓÒ ÓÙÓÔÅÍ NO ÇÅÏÓ SYSTEM FILE (ÓÅÑ OR ÖÌÉÒ STRUCTURE) ÕÓÒ ÄÅÓË_ÁÃà YES ÇÅÏÓ DESK ACCESSORY (ÓÅÑ STRUCTURE) ÕÓÒ ÁÐÐÌÉÃÁÔÉÏÎ YES ÇÅÏÓ APPLICATION FILE (ÓÅÑ OR ÖÌÉÒ) ÕÓÒ ÁÐÐÌ_ÄÁÔÁ YES DATA FILE FOR A ÇÅÏÓ APP. (ÓÅÑ OR ÖÌÉÒ) ÕÓÒ ÆÏÎÔ NO ÇÅÏÓ FONT FILE (ÖÌÉÒ) ÕÓÒ ÐÒÉÎÔÅÒ NO ÇÅÏÓ PRINTER DRIVER (ÓÅÑ) ÕÓÒ ÉÎÐÕÔ_ÄÅÖÉÃÅ NO ÇÅÏÓ INPUT DEVICE (MOUSE, KOALA, ETC. ÓÅÑ) ÕÓÒ ÄÉÓË_ÄÅÖÉÃÅ NO ÇÅÏÓ DISK DEVICE DRIVER ÕÓÒ ÓÙÓÔÅÍ_ÂÏÏÔ NO ÇÅÏÓ SYSTEM BOOT FILE (FOR ÇÅÏÓ, ÇÅÏÓ ÂÏÏÔ, ÇÅÏÓ ËÅÒÎÁÌ) ÕÓÒ ÔÅÍÐÏÒÁÒÙ NO ÔEMPORARY FILE TYPE, FOR SWAP FILES. ÕÓÒ ÁÕÔÏ_ÅØÅà YES ÁPP (ÓÅÑ OR ÖÌÉÒ) WHICH LOADS AND RUNS UPON BOOT ÕÓÒ ÉÎÐÕÔ_128 NO ÇÅÏÓ 128 ÉNPUT DRIVER ---- --------------- ------- ------------------------------------------------ ÒÅÌ ÎÏÔ_ÇÅÏÓ NO ÃOMMODORE RANDOM-ACCESS DATAFILE, AS IF GENERATED BY ÂÁÓÉà PROGRAM. ÃANNOT BY GIVEN AN ICON BY ÉCON ÅDITOR BECAUSE WOULD DESTORY EXISTING POINTER TO DATA CHAIN. ---- --------------- ------- ------------------------------------------------ ÎOTES: *1: (ÐÒÇ, ÎÏÔ_ÇÅÏÓ) ×HEN YOU TRY TO OPEN THIS TYPE OF PROGRAM FROM THE DESKÔOP, THE DESKÔOP'S "ÄOÂASICÌOAD" ROUTINE WILL LOAD THE PROGRAM'S FIRST DATA BLOCK, TO CHECK ITS LOAD ADDRESS. ADDR < $0400 ÉS A "STACK-GRABBING" ASSEMBLY LANGUAGE PROGRAM. ÇÅÏÓ CANNOT ÔURBO-LOAD THIS, SO WE FORCE ÂÁÓÉà TO EXECUTE: ÌÏÁÄ "NAME",8,1. ADDR = $0801 ($1Ã01 ON 128) ÉS A ÂÁÓÉà PROGRAM. ÔHE DESKÔOP WILL CHECK THE FILE SIZE INFORMATION IN THE DIRECTORY ENTRY TO SEE IF THE PROGRAM CAN BE ÔURBO-LOADED. ÉF THE ÂÁÓÉà PROGRAM IS <= 30480 BYTES, THE DESKÔOP WILL HAVE ÇÅÏÓ ÔURBO-LOAD IT, AND THEN FORCE ÂÁÓÉà TO EXECUTE THE ÒÕÎ COMMAND. ÉF THE ÂÁÓÉà PROGRAM IS LARGER THAN THIS, THE DESKÔOP WILL NOT LOAD IT. ADDR = OTHER ÔHE Ã64 DESKÔOP WILL NOT ALLOW YOU TO LOAD THIS APPLICATION. ÔHIS IS SO THE DESKÔOP WILL NOT ATTEMPT TO RUN A Ã128 ÂÁÓÉà PROGRAM UNDER Ã64 ÂÁÓÉÃ. ÔHE Ã128 DESKÔOP WILL USE THE ÂÁÓÉà "ÂÏÏÔ" COMMAND TO LOAD THIS FILE. ÉF YOU ATTEMPT TO OPEN SUCH A PROGRAM FROM ÇEOÄEBUGGER, IT MUST HAVE A LOAD ADDRESS OF $0400 OR HIGHER. ÇEOÄEBUGGER WILL NOT CHECK THE LOAD ADDRESS TO SEE IF THE PROGRAM IS ÂÁÓÉà CODE, SO YOU CAN USE GEOÄEBUGGER TO EXAMINE THE INTERNAL STRUCTURE OF Ã64 AND Ã128 ÂÁÓÉà PROGRAMS. *2: (ÐÒÇ, ÂÁÓÉÃ) ÔHE DESKÔOP WILL ATTEMPT TO LOAD SUCH A FILE IN THE SAME MANNER AS THE "ADDR = $0801" CASE ABOVE. ÁS NOTED ABOVE, THE DEBUGGER CAN ALSO LOAD SUCH A PROGRAM FILE. *3: (ÐÒÇ, ÁÓÓÅÍÂÌÙ) ×HEN YOU TRY TO OPEN THIS TYPE OF FILE FROM THE DESKÔOP, THE DESKÔOP'S "ÄOÁSSEMBLYÌOAD" ROUTINE WILL LOAD THE FILE'S FIRST DATA BLOCK, TO CHECK ITS LOAD ADDRESS. ADDR < $0400 ÉS A "STACK-GRABBING" ASSEMBLY LANGUAGE PROGRAM. ÇÅÏÓ CANNOT ÔURBO-LOAD THIS, SO THE DESKÔOP FORCES ÂÁÓÉà TO EXECUTE: ÌÏÁÄ "NAME",8,1. $0400 <= ADDR < $0800 ÔHE Ã64 DESKÔOP WILL NOT ALLOW YOU TO LOAD THIS PROGRAM, BUT THE Ã128 DESKÔOP WILL. ADDR >= $0800 ÔHE DESKÔOP WILL LOAD THE PROGRAM'S HEADER BLOCK, TO CHECK ITS ENDING ADDRESS. ÉF THE PROGRAM ENDS BELOW $8000, THE DESKÔOP WILL HAVE ÇÅÏÓ ÔURBO-LOAD THE PROGRAM. ÂÁÓÉà WILL THEN EXECUTE A ÓÙÓ TO THE PROGRAM'S INIT ADDRESS FROM THE HEADER BLOCK. ÉF THE PROGRAM ENDS AT OR ABOVE $8000, THE DESKÔOP WILL FORCE ÂÁÓÉà TO EXECUTE: ÌÏÁÄ "NAME",8,1:ÓÙÓ (INIT ADDRESS) ÉF YOU ATTEMPT TO OPEN SUCH A PROGRAM FROM ÇEOÄEBUGGER, IT MUST HAVE A LOAD ADDRESS OF $0400 OR HIGHER. ÇEOÄEBUGGER WILL SET THE Ðà TO THE VALUE OF THE INIT ADDRESS WHICH IS STORED IN THE HEADER BLOCK. ÇEOÄEBUGGER WILL NOT CHECK THE ENDING ADDRESS OF THE PROGRAM. ÇEOÄEBUGGER ÍEMORY ÒEAD/×RITE ÒOUTINE ------------------------------------- ×HENEVER THE DEBUGGER IS ASKED TO READ OR WRITE A BYTE TO MEMORY, IT WORKS THROUGH THE ÌOADÂYTE/ÓAVEÂYTE ROUTINE IN ÍONITOR/C64IO. ÅXAMPLES INCLUDE: - EXAMINING AND MODIFYING MEMORY USING "Á" OR "Í" OPEN COMMANDS - SETTING AND CLEARING INSTRUCTION BREAKPOINTS - MEMORY RANGE COMMANDS: MOVE, FILL, DIFF, FIND ÔHESE TWO ROUTINES ARE BOTH VERY SHORT: THEY SIMPLY SET A FLAG INDICATING WHETHER WE ARE READING OR WRITING, AND THEN CALL ÌOADÓAVEÂYTE. ÌOADÓAVEÂYTE GOES THROUGH A FOUR STEP PROCESS TO DETERMINE WHAT TO DO WITH THE MEMORY ACCESS REQUEST. ÔHIS IS A COMPLICATED PROCESS BECAUSE THERE ARE MANY CASES WHERE A DIRECT LOAD/SAVE IS OUT OF THE QUESTION: - THE USER IS TRYING TO MODIFY A BYTE IN ZERO PAGE, BUT THE MONITOR KEEPS THE USER'S ZERO PAGE IN THE MONITOR VARIABLE SPACE - THE USER IS TRYING TO MODIFY A BYTE IN THE APPLICATION SPACE, BUT IT HAS BEEN SWAPPED OUT TO THE ÒÅÕ - THE USER IS TRYING TO WRITE OVER MONITOR CODE - THE USER IS TRYING TO READ/WRITE TO THE OTHER BANK THAN IS CURRENTLY IN DURING MONITOR EXECUTION. - THE USER IS TRYING TO MODIFY ÃÐÕ_ÄÁÔÁ OR CONFIG, WHICH WOULD IMMEDIATELY CHANGE THE MEMORY MAP AND PROBABLY CRASH THE DEBUGGER. ÌOADÓAVEÂYTE'S FOUR STEP PROCESS CAN BE BROKEN DOWN AS: 1) ÈANDLE MEMORY MAP CONTROLS AT $0000, $0001, AND $ÆÆ00 (128) AS A SPECIAL CASE. 2) ÉF THIS ACCESS IS IN THE ÉÏ SPACE, AND ÉÏ IS ENABLED, USE THE ÉÏ ÁÄÄÒÅÓÓ ÔÁÂÌÅ TO DECIDE WHICH ÉÏ LOCATIONS HE CAN MODIFY DIRECTLY AND WHICH ONES WE KEEP SHADOWS FOR IN THE MONITOR VARIABLE AREA. 3) ÉF THIS ACCESS IS IN A SPACE WHERE ÒÏÍ IS CURRENTLY IN, THEN ONLY ALLOW READ OPERATIONS. ÔHE DEBUGGER DOES NOT ALLOW "BLEED THROUGH" WRITES TO RAM UNDERNEATH ROM. 4) ÉF NONE OF THE ABOVE CASES HOLD, THEN THE ACCESS MUST BE TO RAM. ÃALCULATE THE EFFECTIVE BANK NUMBER (128 ONLY), AND USE THE ÒÁÍ ÁÄÄÒÅÓÓ ÔÁÂÌÅ TO DECIDE WHICH LOCATIONS NEED RE-DIRECTION OR ARE ILLEGAL. ÈERE IS THE KEY USED IN THE LOOKUP TABLES ON THE FOLLOWING PAGES: MINI / SUPER / BACK SUPER Í = MINI DEBUGGER CODE AREA (ILLEGAL TO READ/WRITE) Ó = SUPER DEBUGGER CODE AREA (MUST READ/WRITE TO ÒÅÕ SPACE)  = BACKRAM SUPER DEBUGGER CODE AREA (ILLEGAL TO READ/WRITE) Ø = USED BY ALL THREE MONITORS, NO COPY SAVED (ILLEGAL TO READ/WRITE) Ô = SUPER DEBUGGER TEXT SCREEN AREA (ÃÏÌÏÒ_ÍÁÔÒÉØ: R/W TO ÒÅÕ SPACE) Ò = READ ONLY Ä = READ/WRITE DIRECTLY Ú = ZERO PAGE RAM WHICH MONITOR USES (MUST READ/WRITE TO SAVED COPY OF AREA) NA = NOT APPLICABLE (FOR EXAMPLE, ÉÏ CANNOT SHOW UP AT $0400) ÓTEP 1: CHECK FOR OVERRIDING ÉÏ LOCATIONS ----------------------------------------- ÐSEUDO-CODE: Ã64ÍODE: $0000 DIRECT, READ ONLY $0001 <--> APPÍEMÍAP (MEMORY MAP INFO) Ã128: $0000 DIRECT, READ ONLY $0001 <- Â2 AND Â1 -> APPÃÐÕ_Â21 (VIDEO CONTROL INFO) <- OTHER BITS -> APPÍEMÍAP (NON ESSENTIAL INFO) $ÆÆ00 <--> APPÃONFIG (MEMORY MAP INFO) $ÆÆ01-$ÆÆ04 SPECIAL CASE: IS READING ÐÃÒÁ-ÐÃÒÄ OR IS SENDING ONE OF THOSE FOUR TO ÃONFIG ÓTEP 2: CHECK FOR ÉÏ SPACE ACCESSES ----------------------------------- ÉÏ ÁÄÄÒÅÓÓ ÔÁÂÌÅ Ã64 ÍODE....... Ã128 ÍODE.............. ÍEMORY RANGE USAGE / ÇÅÏÓ EQUATE ÉÏ ÉÏ ------------- ----------------------- ------- ------- ------- ------- ------- $0000 - $Ä010 RAM / IO: ÖÉà REGS Ä/Ä Ä/Ä/Ä $Ä011 * IO: ÖÉà GRCTRL1 APPÖÉÃ1 APPÖÉÃ1 $Ä012 - $Ä014 IO: ÖÉà REGS Ä/Ä Ä/Ä/Ä $Ä015 * IO: ÖÉà MOBENBLE APPÖÉÃ2 APPÖÉÃ2 $Ä016 * IO: ÖÉà GRCTRL2 APPÖÉÃ3 APPÖÉÃ3 $Ä017 IO: ÖÉà REG Ä/Ä Ä/Ä/Ä $Ä018 * IO: ÖÉà GRMEMPTR APPÖÉÃ4 APPÖÉÃ4 $Ä019 - $Ä020 IO: ÖÉà REGS Ä/Ä Ä/Ä/Ä $Ä021 * IO: ÖÉà BAKCLR0 APPÖÉÃ5 APPÖÉÃ5 $Ä022 - $Ä02Æ IO: ÖÉà REGS Ä/Ä Ä/Ä/Ä $Ä030 * IO: Ã128 2ÍÈÚ CTRL Ä/Ä APPÃLK $Ä031 - $Ä4ÆÆ RAM / IO / ROM Ä/Ä Ä/Ä/Ä $Ä500 * IO: Ã128 ÍÍÕ CONTROL Ä/Ä APPÃONFG $Ä501 - $Ä504 IO: Ã128 ÍÍÕ REGS Ä/Ä Ä/Ä/Ä $Ä505 * IO: Ã128 ÍÍÕ ÍÃÒ Ä/Ä Ò/Ò/Ò $Ä506 * IO: Ã128 ÍÍÕ "ÒÃÒ" Ä/Ä APPÒÃÒ*1 $Ä507 - $Ä50Á * IO: Ã128 ÍÍÕ ÚÐ RELOC Ä/Ä Ò/Ò/Ò $Ä50 - $Ä7ÆÆ RAM / IO / ROM Ä/Ä Ä/Ä/Ä $Ä800 - $ÄÂÆÆ * IO: TEXT COLORS "CTAB" Ò/Ò *2* $ÄÃ00 - $ÄÃÆÆ RAM / IO / ROM Ä/Ä Ä/Ä/Ä $ÄÄ00 * IO: CIA2BASE (ÖÉà MMAP) APPÃÉÁ2_Â10 *3* APPÃÉÁ2_Â10 $ÄÄ01 - $ÄÅÆÆ RAM / IO / ROM Ä/Ä Ä/Ä/Ä $ÄÆ00 - $ÄÆ09 * IO: ÒÅÕ ÄÍÁ CONTROL Ò/Ò Ò/Ò/Ò $ÄÆ0Á - $ÅÆÆÆ RAM / IO / ROM Ä/Ä Ä/Ä/Ä $Æ001 - $ÆÆÆÆ RAM / ROM Ä/Ä Ä/Ä/Ä ------------- ----------------------- ------- ------- ------- ------- ------- ÃONCLUSIONS: ÎO DIFFERENCES BETWEEN THREE DEBUGGERS- JUST BETWEEN TWO MACHINES. ÏNLY THREE POSSIBLITIES: DIRECT, READ-ONLY, OR ONE OF SEVERAL SPECIAL CASE ROUTINES. ÆOR EACH AREA, NEED BYTE IN TABLE WHICH CONTAINS TWO THREE-BIT CODES, DENOTING WHAT TO DO ON THAT MACHINE. ÔABLE SIZE: 25 LINES * (1 WORD + 1 BYTE) = 75 BYTES ÐLUS ÖÉà HANDLER ROUTINE (USES ADDRESS TO SEE WHICH ÖÉà REGISTERS WE WANT, AND THEN READS/WRITES TO MONITOR SHADOW FOR THAT REGISTER. ÐLUS HANDLER ROUTINES FOR APPÃLK, APPÃONFIG, APPÒÃÒ, AND APPÃÉÁ2_Â10. ÎÏÔÅ 1: IN 128 MODE, $Ä506 IS SPLIT UP BETWEEN APPÒÃÒ_Â76 (ÖÉà BANK INFO) AND APPÒÃÒ_Â50 (MEMORY MAP INFO). ÎÏÔÅ 2: THE TEXT SCREEN COLOR TABLE IS LOCATED AT $Ä800-$ÄÂÆÆ. ÉN Ã64 MODE, WE ONLY ALLOW READS FROM THIS AREA, SO THE USER WON'T SCREW UP THE MONITOR'S TEXT COLORS. ÉN Ã128 MODE, THERE ARE ACTUALLY TWO COLOR TABLES AT THIS LOCATION. ÂIT 1 OF $0001 DETERMINES WHICH IS VISIBLE TO THE 6510. ÉF THIS BIT IS CLEAR, WE ALLOW DIRECT READ/WRITES. ÉF THIS BIT IS SET, WE ONLY ALLOW READS. ÎÏÔÅ 3: BITS 1-0 OF LOCATION $ÄÄ00 CONTROL WHICH 16Ë MEMORY BANK THE ÖÉà CHIP USES, AND SO ARE SAVED IN APPÃÉÁ_Â10. ÔHE OTHER BITS (7-2) ARE WRITTEN TO/ READ FROM MEMORY. ÃAUTION ERIC: IN Ã64 MODE, MAKE SURE ÉÏ IS IN WHEN DOING THIS. ÐSEUDO-ÃODE: IF THE ADDRESS IS BETWEEN $Ä000 AND $ÄÆÆÆ: Ã64: CHECK LOCATION $0001. ÉF (Â1=1 OR Â0=1), THEN É/Ï SPACE IN. ÉF Â2=0, THEN 4Ë ÃÈÁÒ ÒÏÍ IS VISIBLE: ONLY ALLOW READS. ÉF Â2=1, THEN 4Ë OF É/Ï DEVICES ARE VISIBLE: CALL TABLE LOOKUP ROUTINE, USING ÉÏ ÁÄÄÒÅÓÓ ÔÁÂÌÅ. USE Â5-Â3 OF RETURN BYTE TO DECIDE WHAT TO DO. ELSE CAN READ/WRITE DIRECTLY Ã128: CHECK LOCATION $ÆÆ00: ÉF (Â0=0), THEN É/Ï SPACE IS IN. CALL TABLE LOOKUP ROUTINE, USING ÉÏ ÁÄÄÒÅÓÓ ÔÁÂÌÅ. USE Â2-Â0 OF RETURN BYTE TO DECIDE WHAT TO DO. ELSE CAN READ/WRITE DIRECTLY ELSE (ADDRESS IS NOT IN ÉÏ RANGE) GO TO STEP 3 ÓTEP 3: CHECK FOR ÒÏÍ ACCESS ---------------------------- Ã64 ÍODE ÒOM ÔRUTH ÔABLE LOCATION $0001 ÍEMORY RANGE ×HAT ÍIGHT ÂE ÔHERE 76543210 ÎOTES ------------- ----------------------- --------------- ------------------------ $0000 - $9ÆÆÆ RAM -------- $Á000 - $ÂÆÆÆ RAM / ÂASIC ROM -------1 Â0=1 $Ã000 - $ÄÆÆÆ RAM *1* -------- $Å000 - $ÆÆÆÆ RAM / ËERNAL ROM ------1- Â1=1 ÎOTE THAT THERE ARE CASES WHERE CARTRIDGES PLUGGED INTO THE Ã64 CAN OVERRIDE THESE AREAS. ÔHE Ã64 ÐROG. ÒEF. ÇUIDE IS NOT VERY CLEAR ON THIS, SO É WILL NOT BE CONCERNED ABOUT CARTRIDGES FOR NOW. ÅÄÓ 2/8/88. ÎOTE 1: THE CASE WHERE ÃÈÁÒ ÒÏÍ IS MAPPED IN FROM $Ä000 TO $ÄÆÆÆ HAS ALREADY BEEN HANDLED BY ÉÏ TABLE. Ã128 ÍODE ÒOM ÔRUTH ÔABLE LOCATION $ÆÆ00 ÍEMORY RANGE ×HAT ÍIGHT ÂE ÔHERE 76543210 ÎOTES ------------- ----------------------- --------------- ------------------------ $0000 - $3ÆÆÆ RAM -------- $4000 - $7ÆÆÆ RAM / ÂASIC ROM LOW ------0- Â1=0 $8000 - $ÂÆÆÆ RAM / ÂASIC ROM HIGH ----AB-- Â3=0 OR Â2=0 $Ã000 - $ÆÆÆÆ RAM / ËERNAL ROM --AB---- Â5=0 OR Â4=0 É DON'T COMPLETELY UNDERSTAND Ã128 EXTERNAL ROMS YET. É AM GOING TO ASSUME THAT Â5-Â1 IN $ÆÆ00 DETERMINE IF THERE IS ANY ÒÏÍ IN. É DON'T CARE IF IS ËERNAL, EXTERNAL, INTERNAL, OR CARTRIDGE ROM. É JUST WON'T WRITE TO THOSE RANGES IF THE BITS ARE CLEAR. ÐSEUDO-CODE: ÁS IT TURNS OUT, THE FASTEST AND TIGHTEST CODE TO HANDLE THIS SIMPLY CHECKS ADDRESS RANGES AND BITS DIRECTLY. ÓEE THE CODE. ÓTEP 4: ÒÁÍ ACCESS ------------------ Ã64 ÍODE Ã128 ÍODE...... ÍEMORY RANGE USAGE / ÇÅÏÓ EQUATE ÒÁÍ ÒÁÍ Â1 ÒÁÍ Â0 ------------- ----------------------- ------- ------- ------- $0000 - $0001 ÁLREADY HANDLED BY STEP 1. $0002 - $00ÄÄ * ZERO PAGE (MON SWAPS) Ú/Ú NA Ú/Ú/Ú $00ÄÅ - $00ÆÆ ZERO PAGE Ä/Ä NA Ä/Ä/Ä $0100 - ÓÐ * STACK (MONITOR USES) Ø/Ø NA Ø/Ø/Ø ÓÐ+1 - $01ÆÆ STACK (USER'S DATA) Ä/Ä NA Ä/Ä/Ä *1* $0200 - $0313 RAM Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $0314 - $0319 * BASÉÒÑÖEC, ÂÒË, ÎÍÉ Ò/Ò Ä/Ä/Ä Ò/Ò/Ò $031Á - $0333 RAM Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $0334 - $03Æ * MONITOR CODE Ø/Ø Ø/Ø/Ø Ø/Ø/Ø $03Æà - $03ÆÆ MONITOR ÊÓÒ AREA Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $0400 - $1ÆÆÆ * RAM Ä/Ó Ä/Ó/Ä Ä/Ä/Ä $2000 - $3ÂÆÆ * RAM Ä/Ó Ä/Ó/Ä Ä/Ä/ $3Ã00 - $5ÆÆÆ * RAM Í/Ó Í/Ó/Ä Ä/Ä/ $6000 - $78ÆÆ * RAM Ä/Ó Ä/Ó/Ä Ä/Ä/ $7900 - $8ÂÆÆ * RAM Ä/Ä Ä/Ä/Ä Ä/Ä/ $8Ã00 - $8ÆÅ7 * RAM (MONITOR TEXT SCR) Ò/Ô Ò/Ô/Ä Ä/Ä/ $8ÆÅ8 - $9ÆÆÆ * RAM Ä/Ä Ä/Ä/Ä Ä/Ä/ $Á000 - $ÆÆÆ9 RAM / ROM IF >$Ä000 Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $ÆÆÆÁ - $ÆÆÆÆ * ÎÍÉ_ÖÅÃÔÏÒ, ÒÅÓÅÔ, ÉÒÑ Ò/Ò Ò/Ò/Ò Ò/Ò/Ò ------------- ----------------------- ------- ------- ------- ------- ------- ÃONCLUSIONS: ÍINI DEBUGGER AND ÓUPER DEBUGGERS ARE COMPLETELY DIFFERENT CASES. ÕSE CONDITIONAL ASSEMBLY TO DECIDE WHICH TABLE TO USE. ÍINI DEBUGGER HAS FOUR POSSIBILITIES: DIRECT, READ-ONLY, ILLEGAL, AND ZERO PAGE. ÆOR EACH AREA, NEED BYTE IN TABLE WHICH CONTAINS TWO THREE-BIT CODES, DENOTING WHAT TO DO ON THAT MACHINE. ÔABLE SIZE: 15 LINES * (1 WORD + 1 BYTE) = 45 BYTES ÁLL TABLE VALUES ARE STANDARD CASES. ÔHE SUPER DEBUGGER'S TABLE IS SIMILAR: FOR EACH AREA, THERE ARE SIX POSSIBILITIES, ALL STANDARD. ÔHE TABLE NEEDS TO GIVE US A WORD VALUE WHICH CONTAINS FIVE THREE-BIT CODES: MACHINE MONITOR ACCESS TYPE BITS IN WORD --------------- --------------- --------------- ------------ 128 MODE BACKRAM SUPER BANK 0 ACCESS Â14-Â12 128 MODE BACKRAM SUPER BANK 1 ACCESS Â11-Â9 128 MODE ÒÅÕ SUPER BANK 0 ACCESS Â8-Â6 128 MODE ÒÅÕ SUPER BANK 0 ACCESS Â2-Â0 64 MODE ÒÅÕ SUPER Â5-Â3 --------------- --------------- --------------- ------------ ÔABLE SIZE: 18 LINES * (1 WORD + 2 BYTES) = 76 BYTES ÁLL TABLE VALUES ARE STANDARD CASES. ÎÏÔÅ 1: THE REGION ÓÐ+1 TO $313 CAN BE COMBINED, BECAUSE THE EFFECTIVE BANK CALCULATION WILL NOT GIVE AN ADDRESS <$200 IN BANK 1. ÐSEUDO-CODE: FIRST CALCULATE EFFECTIVE BANK (ONLY NECESSARY ON Ã-128) IF ADDRESS IS LESS THAN $200, IS ÂANK 0. IF APPÃONFIG Â6 = 1 THEN (ÎÏÔÅ: IGNORE Â7) (BANK 1 IS ENABLED, BUT WE MUST CHECK RAM SHARING) IF ADDRESS HIGH BYTE >= $80 IF APPÒÃÒ Â3 = 1 USE LOOKUP TABLE FOR APPÒÃÒ Â1-Â0: 00 $Æà 01 $Æ0 10 $Å0 11 $Ã0 IF ADDRESS HIGH BYTE < THIS VALUE, IS BANK 1 ELSE IS BANK 0 ELSE IS BANK 1 ELSE (ADDRESS HIGH BYTE < $80) IF APPÒÃÒ Â2 = 1 USE LOOKUP TABLE FOR APPÒÃÒ Â1-Â0: 00 $04 01 $10 10 $20 11 $40 IF ADDRESS HIGH BYTE >= THIS VALUE, IS BANK 1 ELSE IS BANK 0 ELSE IS BANK 1 ELSE IS BANK 0 ÔÈÅÓÅ ÂÉÔ ÎÕÍÂÅÒÓ ÈÁÖÅ ÃÈÁÎÇÅÄ ÔHEN USE TABLE TO DETERMINE WHAT TO DO WITH THAT ADDRESS, CONSIDERING THE MACHINE, MONITOR TYPE, AND BANK DESIRED. IF USING MINI DEBUGGER CALL TABLE LOOKUP ROUTINE, USING ÍÉÎÉ ÒÁÍ ÁÄÄÒÅÓÓ ÔÁÂÌÅ IF IN Ã64 MODE: USE Â5-Â3 OF RETURN BYTE TO DECIDE WHAT TO DO. ELSE (Ã128 MODE): USE Â2-Â0 OF RETURN BYTE TO DECIDE WHAT TO DO. IF USING SUPER DEBUGGER: CALL TABLE LOOKUP ROUTINE, USING ÍÉÎÉ ÒÁÍ ÁÄÄÒÅÓÓ ÔÁÂÌÅ IF IN Ã64 MODE: USE Â5-Â3 OF RETURN BYTE TO DECIDE WHAT TO DO. ELSE (Ã128 MODE): IF SUPER DEBUGGER IF ACCESSING BANK 1 USE Â2-Â0 OF RETURN WORD IF ACCESSING BANK 0 USE Â8-Â6 OF RETURN WORD IF BACKRAM SUPER DEBUGGER IF ACCESSING BANK 1 USE Â11-Â9 OF RETURN WORD IF ACCESSING BANK 0 USE Â14-Â12 OF RETURN WORD ÔHIS DECISION TREE SEEMS FAIRLY COMPLICATED, BUT IT BREAKS DOWN PRETTY WELL IN THE CODE. ÇENERAL ÍEMORY ÐROTECT ÍAP -------------------------- Ã64 ÍODE....... Ã128 ÍODE.............. ÍEMORY RANGE USAGE / ÇÅÏÓ EQUATE ÒÁÍ ÉÏ ÒÁÍ Â1 ÒÁÍ Â0 ÉÏ ------------- ----------------------- ------- ------- ------- ------- ------- $0000 * ÃÐÕ_ÄÄÒ 6510 ÄÄÒ ALL CASES: Ò/Ò ALL CASES: Ò/Ò $0001 * ÃÐÕ_ÄÁÔÁ 6510 DATA PORT <-> APPÍEMÍAP <-> APPÃÐÕ_Â21+APPÍEMÍAP $0002 - $00ÄÄ * ZERO PAGE (MON SWAPS) Ú/Ú NA NA Ú/Ú/Ú NA $00ÄÅ - $00ÆÆ ZERO PAGE Ä/Ä NA NA Ä/Ä/Ä NA $0100 - ÓÐ * STACK (MONITOR USES) Ø/Ø NA NA Ø/Ø/Ø NA ÓÐ+1 - $01ÆÆ STACK (USER'S DATA) Ä/Ä NA NA Ä/Ä/Ä NA $0200 - $0313 RAM Ä/Ä NA Ä/Ä/Ä Ä/Ä/Ä NA $0314 - $0319 * BASÉÒÑÖEC, ÂÒË, ÎÍÉ Ò/Ò NA Ä/Ä/Ä Ò/Ò/Ò NA $031Á - $0333 RAM Ä/Ä NA Ä/Ä/Ä Ä/Ä/Ä NA $0334 - $03Æ * MONITOR CODE Ø/Ø NA Ø/Ø/Ø Ø/Ø/Ø NA $03Æà - $03ÆÆ MONITOR ÊÓÒ AREA Ä/Ä NA Ä/Ä/Ä Ä/Ä/Ä NA $0400 - $1ÆÆÆ * RAM Ä/Ó NA Ä/Ó/Ä Ä/Ä/Ä NA $2000 - $3ÂÆÆ * RAM Ä/Ó NA Ä/Ó/Ä Ä/Ä/ NA $3Ã00 - $3ÆÆÆ * RAM Í/Ó NA Í/Ó/Ä Ä/Ä/ NA $4000 - $5ÆÆÆ * RAM (ÂÇ SCREEN) Í/Ó NA Í/Ó/Ä Ä/Ä/ NA $6000 - $78ÆÆ * RAM Ä/Ó NA Ä/Ó/Ä Ä/Ä/ NA $7900 - $8ÂÆÆ * RAM Ä/Ä NA Ä/Ä/Ä Ä/Ä/ NA $8Ã00 - $8ÆÅ7 * ÃÏÌÏÒ_ÍÁÔÒÉØ / RAM Ä/Ä NA Ä/Ä/Ä Ä/Ä/ NA $8ÆÅ8 - $8ÆÆÆ * RAM Ä/Ä NA Ä/Ä/Ä Ä/Ä/ NA $9000 - $9ÆÆÆ * RAM Ä/Ä NA Ä/Ä/Ä Ä/Ä/ NA $Á000 - $ÂÆÆÆ RAM (ÆÇ SCREEN) Ä/Ä NA Ä/Ä/Ä Ä/Ä/Ä NA $Ã000 - $ÃÆÆÆ RAM Ä/Ä NA Ä/Ä/Ä Ä/Ä/Ä NA $Ä000 - $Ä010 IO: ÖÉà REGS Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $Ä011 * IO: ÖÉà GRCTRL1 Ä/Ä APPÖÉÃ1 Ä/Ä/Ä Ä/Ä/Ä APPÖÉÃ1 $Ä012 - $Ä014 IO: ÖÉà REGS Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $Ä015 * IO: ÖÉà MOBENBLE Ä/Ä APPÖÉÃ2 Ä/Ä/Ä Ä/Ä/Ä APPÖÉÃ2 $Ä016 * IO: ÖÉà GRCTRL2 Ä/Ä APPÖÉÃ3 Ä/Ä/Ä Ä/Ä/Ä APPÖÉÃ3 $Ä017 IO: ÖÉà REG Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $Ä018 * IO: ÖÉà GRMEMPTR Ä/Ä APPÖÉÃ4 Ä/Ä/Ä Ä/Ä/Ä APPÖÉÃ4 $Ä019 - $Ä020 IO: ÖÉà REGS Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $Ä021 * IO: ÖÉà BAKCLR0 Ä/Ä APPÖÉÃ5 Ä/Ä/Ä Ä/Ä/Ä APPÖÉÃ5 $Ä022 - $Ä02Æ IO: ÖÉà REGS Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $Ä030 * IO: Ã128 2ÍÈÚ CTRL Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä APPÃLK $Ä031 - $Ä4ÆÆ RAM / IO / ROM Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $Ä500 * IO: Ã128 ÍÍÕ CONTROL Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä APPÃONFG $Ä501 - $Ä504 IO: Ã128 ÍÍÕ REGS Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $Ä505 * IO: Ã128 ÍÍÕ ÍÃÒ Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ò/Ò/Ò $Ä506 * IO: Ã128 ÍÍÕ "ÒÃÒ" Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä APPÒÃÒ*1 $Ä507 - $Ä50Á * IO: Ã128 ÍÍÕ ÚÐ RELOC Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ò/Ò/Ò $Ä50 - $Ä7ÆÆ RAM / IO / ROM Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $Ä800 - $ÄÂÆÆ * IO: TEXT COLORS "CTAB" Ä/Ä Ò/Ò Ä/Ä/Ä Ä/Ä/Ä *2* $ÄÃ00 - $ÄÃÆÆ RAM / IO / ROM Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $ÄÄ00 * IO: CIA2BASE (ÖÉà MMAP) Ä/Ä APPÃÉÁ2_Â10 Ä/Ä/Ä Ä/Ä/Ä *3* $ÄÄ01 - $ÄÅÆÆ RAM / IO / ROM Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $ÄÆ00 - $ÄÆ09 * IO: ÒÅÕ ÄÍÁ CONTROL Ä/Ä Ò/Ò Ä/Ä/Ä Ä/Ä/Ä Ò/Ò/Ò $ÄÆ0Á - $ÄÆÆÆ RAM / IO / ROM Ä/Ä Ä/Ä Ä/Ä/Ä Ä/Ä/Ä Ä/Ä/Ä $Å000 - $ÅÆÆÆ RAM / ROM Ä/Ä NA Ä/Ä/Ä Ä/Ä/Ä NA $Æ000 * Ã128: CONFIG REGISTER Ä/Ä NA ALL CASES: <-> APPÃONFIG $Æ001 - $ÆÆÆ9 RAM / ROM Ä/Ä NA Ä/Ä/Ä Ä/Ä/Ä NA $ÆÆÆÁ - $ÆÆÆÆ * ÎÍÉ_ÖÅÃÔÏÒ, ÒÅÓÅÔ, ÉÒÑ Ò/Ò NA Ò/Ò/Ò Ò/Ò/Ò NA ------------- ----------------------- ------- ------- ------- ------- ------- ÁSSUMPTIONS: ÒÏÍ DECODED SEPARATELY ADDRESS DECODE FOR RAM BANK SHARING ALREADY WORKED OUT CAN SIMPLIFY TABLE A BIT WITH .IF ÍÉÎÉ ÎÏÔÅ 1: IN 128 MODE, $Ä506 IS SPLIT UP BETWEEN APPÒÃÒ_Â76 (ÖÉà BANK INFO) AND APPÒÃÒ_Â50 (MEMORY MAP INFO). ÎÏÔÅ 2: THE TEXT SCREEN COLOR TABLE IS LOCATED AT $Ä800-$ÄÂÆÆ. ÉN Ã64 MODE, WE ONLY ALLOW READS FROM THIS AREA, SO THE USER WON'T SCREW UP THE MONITOR'S TEXT COLORS. ÉN Ã128 MODE, THERE ARE ACTUALLY TWO COLOR TABLES AT THIS LOCATION. ÂIT 1 OF $0001 DETERMINES WHICH IS VISIBLE TO THE 6510. ÉF THIS BIT IS CLEAR, WE ALLOW DIRECT READ/WRITES. ÉF THIS BIT IS SET, WE ONLY ALLOW READS. ÎÏÔÅ 3: BITS 1-0 OF LOCATION $ÄÄ00 CONTROL WHICH 16Ë MEMORY BANK THE ÖÉà CHIP USES, AND SO ARE SAVED IN APPÃÉÁ_Â10. ÔHE OTHER BITS (7-2) ARE WRITTEN TO/ READ FROM MEMORY. ÃAUTION ERIC: IN Ã64 MODE, MAKE SURE ÉÏ IS IN WHEN DOING THIS. ×ARN IN MANUAL THAT WE DO NOT ALLOW BLEED-THROUGH. ÔHEY WILL HAVE TO SWAP RAM IN MANUALLY TO CHANGE IT. ÔHIS MEANS WE CAN'T USE A SINGLE ÍÏÖÅ COMMAND TO COPY ROM TO RAM... ÇEOÄEBUGGER HAS LIMITED SUPPORT FOR THE CREATION AND DEBUGGING OF ÃÂÍ APPLICATIONS. ÔHE Ã128 DESKÔOP HAS SOME BUGS RELATED TO LOADING ÃÂÍ APPLICATIONS. ÇEOÐROGRAMMER CURRENTLY SUPPORTS THE ASSEMBLY AND LINK OF: ÇÅÏÓ APPLICATIONS (ÓÅÑ OR ÖÌÉÒ, WITH HEADER) ÇÅÏÓ DESK ACCESSORIES (ÓÅÑ BY DEFINITION, WITH HEADER) ÃÂÍ APPLICATIONS STANDARD ÃOMMODORE ÐÒÇ FILE (ÇÅÏÓ FILE TYPE = ÎÏÔ_ÇÅÏÓ, DOES NOT HAVE A HEADER BLOCK). ÄESKÔOP HAS RESTRICTIONS ON WHICH LOAD ADDRESSES IT CAN HANDLE. ÃOMMODORE ÂÁÓÉÃ'S ÌÏÁÄ AND ÂÏÏÔ COMMANDS CAN LOAD MOST ADDRESSES OK. ÇEOÄEBUGGER CAN LOAD MOST ADDRESSES OK. ÔHERE IS SOME AMOUNT OF SUPPORT IN THE DEBUGGER FOR LOADING AND DEBUGGING ÃÂÍ APPLICATIONS. - CAN TOGGLE BETWEEN ANY KIND OF SCREEN THE ÖÉà AND ÖÄà CHIPS SUPPORT - APP CAN TRASH ALL OF ÇÅÏÓ ADDRESS SPACE ÐROBLEMS: - ON Ã128, DEBUGGER CAN ONLY LOAD A ÃÂÍ APP TO BANK 1, WHEREAS ÂÁÓÉà EXPECTS SUCH AN APPLICATION TO RUN IN BANK 0. ÅITHER WRITE YOUR APPLICATION TO RUN IN EITHER BANK (SEE ÓAMPLEÃÂÍ), OR USE A CONSTANT SO YOU CAN ASSEMBLE IT TO RUN IN EITHER BANK. - ÔHE DEBUGGER DOES NOT DO ANY ERROR CHECKING ON THE LOAD ADDRESS OF A ÃÂÍ APPLICATION. ÉT WILL CRASH IF YOU TRY TO LOAD AN APP BELOW $400. ÁPPLICATION CANNOT LOAD ABOVE THE $8000 AREA. - ÇEOÄEBUGGER FILLS THE TEXT COLOR TABLE ONCE. ÉF THE ÃÂÍ APPLICATION FILLS THE TEXT COLOR TABLE (TABLE #1 ON THE 128), THE DEBUGGER'S CHARACTERS WILL BE COLORED. ÉF THE ÃÂÍ APP FILLS WITH $0Â, THE DEBUGGER CHARACTERS WILL BE INVISIBLE, SINCE THE DEBUGGER SETS THE BACKGROUND TO $0Â. - IF THE ÃÂÍ APP PUTS UP A SCREEN WHICH RESIDES IN THE $0400-$7ÆÆÆ AREA, THEN YOU WILL NOT BE ABLE TO VIEW IT FROM THE SUPER DEBUGGER USING Æ7 OR Æ8. ÔHIS IS BECAUSE THESE COMMANDS DO NOT SWAP THE DEBUGGER CODE OUT OF THIS AREA: THE ÖÉà CHIP WILL BE GIVEN THE CORRECT PARAMETERS, BUT IT WILL BE DISPLAYING DEBUGGER CODE INSTEAD OF THE APPLICATION'S SCREEN DATA. ×ITH A LITTLE BIT OF WORK, YOU CAN GET GEOÁSSEMBLER AND GEOÌINKER TO GENERATE: ÁSSEMBLY-ÉN-ÂASIC PROGRAM Á (ÐÒÇ-ÎÏÔ_ÇÅÏÓ) APPLICATION WHICH LOOKS LIKE A ÂÁÓÉà PROGRAM, BUT REALLY ONLY HAS SEVERAL LINES OF ÂÁÓÉÃ. ÒEMAINDER IS ASSEMBLY CODE. ÓÅÑ DATAFILE: AS IF WAS CREATED BY ÂÁÓÉÃ. ÃREATE A ÇÅÏÓ ÓÅÑ FILE, THEN CHANGE THE ÃOMMODORE AND ÇÅÏÓ FILE TYPE BYTES. ÇÅÏÓ APPLICATION DATAFILE: AS IF WAS CREATED BY A ÇÅÏÓ APPLICATION. ÃREATE A ÇÅÏÓ ÓÅÑ FILE, THEN CHANGE THE ÇÅÏÓ FILE TYPE BYTE. ÉN A SIMILAR MANNER, YOU CAN USE ÇEOÄEBUGGER TO EXAMINE A WIDE VARIETY OF DIFFERENT FILE TYPES. ÂUT FIRST, YOU MUST CHANGE THE ÃOMMODORE AND/OR ÇÅÏÓ FILE TYPE BYTE, AND THE LOAD ADDRESS IN THE HEADER BLOCK. ÆUTURE ÇEOÐROGRAMMER IDEAS: ÇENERATE ÃÂÍ ÁPPLICATION WITH HEADER: ÅSSENTIALLY A ÃÂÍ ASSEMBLY-LANGUAGE PROGRAM, BUT WITH A ÇÅÏÓ HEADER. ×OULD SAVE THE ÉCON ÅDITOR STEP CURRENTLY REQUIRED. ÓPECIFICATION OF "HIDE DEBUG SCREEN MODE" Æ7 IS PRESSED: ÔÏÇÇÌÅ ÓÃÒÅÅÎ: SHOW ÕÓÅÒ SCREEN WAIT FOR PRESS SHOW ÄÅÂÕÇ SCREEN IF ÍÉÎÉ: PLACE CURSOR ON LEFT PRINT PROMPT PRINT INPUT LINE AS IT WAS LOOP FOR NEXT CHARACTER Æ8 IS PRESSED: IF HIDDEN = ÆÁÌÓÅ ÅÎÁÂÌÅ ÓÈÏ× ÍÏÄÅ: CALL ÔOGGLEÓCREEN TO SWITCH USER PARAMETERS TO HARDWARE SET HIDEÄEBUGÓCREEN = ÔÒÕÅ LOOP FOR NEXT CHARACTER IF HIDDEN = ÔÒÕÅ ÄÉÓÁÂÌÅ ÓÈÏ× ÍÏÄÅ: SET HIDEÄEBUGÓCREEN = ÆÁÌÓÅ CALL ÔOGGLEÓCREEN TO SWITCH USER PARAMETERS TO SHADOWS, AND DISPLAY DEBUGGER SCREEN IF IN LEFT-SIDE COMMAND MODE (MUST REPRINT LINE BECAUSE NOTHING HAS BEEN PRINTED) PLACE CURSOR ON LEFT PRINT PROMPT PRINT INPUT LINE AS IT WAS IF NOT IN LEFT-SIDE COMMAND MODE CANCEL OPEN MODE / DEPOSIT MODE PRINT PROMPT LOOP FOR NEXT CHARACTER ÈOW ÇEOÄEBUGGER ÈANDLES ÉÒÑ ÉNTERRUPTS -------------------------------------- ÉF YOU ARE WRITING A NORMAL ÇÅÏÓ APPLICATION, THEN YOU DO NOT HAVE TO READ THE FOLLOWING INFORMATION. ÙOU CAN SKIP AHEAD TO THE SECTION TITLED "ÓTRAY ÉNTERRUPT "ÔÒÁÐ" ÆACILITY". ÉF YOU ARE WRITING A NON-ÇÅÏÓ APPLICATION WHICH SETS UP ITS OWN INTERRUPT SERVICE ROUTINE, THIS INFORMATION IS VITAL; YOUR PROGRAM WILL NOT RUN CORRECTLY UNDER ÇEOÄEBUGGER UNLESS YOU FOLLOW THESE INSTRUCTIONS. ÎOTE: ÉÓÒ STANDS FOR ÉNTERRUPT ÓERVICE ÒOUTINE. ×HEN ÇEOÄEBUGGER IS RUNNING A USER APPLICATION, IT INSERTS A SMALL WEDGE ROUTINE IN PLACE OF THE NORMAL ÉÓÒ (WHICH IN MOST CASES WILL BE THE ÇÅÏÓ ÉÓÒ). ÔHIS WEDGE FIRST CHECKS IF THE ÉÒÑ INTERRUPT WAS GENERATED BY THE ÉÒÑ LINE OR A ÂÒË INSTRUCTION. ÉF IT WAS A ÂÒË INSTRUCTION, THE WEDGE EXECUTES THE APPROPRIATE MONITOR. ÉF THE INTERRUPT WAS AN ÉÒÑ, THE WEDGE CALLS THE EXISTING ÉÓÒ. ÔHUS: THE DEBUGGER IS ABLE TO MONITOR THE ÉÒÑ/ÂÒË EVENTS, WITHOUT INTERFERING WITH REGULAR INTERRUPT SERVICING THAT IS VITAL TO MOST APPLICATIONS. ÔO INSERT THIS WEDGE ROUTINE INTO THE INTERRUPT SEQUENCE, ÇEOÄEBUGGER MUST FIRST EXAMINE THE ÉÒÑ VECTOR AT LOCATION $ÆÆÆÅ, TO SEE WHERE THE CURRENT ÉÓÒ IS LOCATED. ÉT THEN MUST MODIFY THIS VECTOR SO IT WILL POINT TO THE ÇEOÄEBUGGER WEDGE ROUTINE WHICH IS LOCATED IN THE $0334 AREA. ÉF YOU ARE WRITING A NON-ÇÅÏÓ APPLICATION WHICH SETS UP ITS OWN ÉÓÒ, THEN YOU WILL PROBABLY WE SETTING THE ÉÒÑ VECTOR AT SOME POINT DURING YOUR INITIALIZATION CODE. ÉN ORDER FOR YOUR APPLICATION TO RUN UNDER ÇEOÄEBUGGER, YOU MUST SET THIS VECTOR CAREFULLY; BECAUSE IF YOUR APPLICATION IS RUNNING UNDER ÇEOÄEBUGGER, YOU NEED TO STORE THE ADDRESS OF YOUR ÉÓÒ TO A VECTOR IN THE ÇEOÄEBUGGER WEDGE CODE, ÎÏÔ TO THE ÉÒÑ VECTOR. ÂELOW IS A ROUTINE WHICH YOU CAN INSERT INTO YOUR PROGRAM TO SET UP THE APPROPRIATE VECTOR TO YOUR ÉÓÒ. ÎOTE THAT THIS ROUTINE ASSUMES THAT YOUR APPLICATION WILL ONLY ALLOW INTERRUPTS WHEN THE MEMORY MAP IS CONFIGURED AS A STANDARD ÇÅÏÓ MEMORY MAP. ÏN THE Ã64, THIS MEANS ALL ÒÁÍ, AND ON THE Ã128, THIS MEANS ALL BANK 1 ÒÁÍ, NO ÒÏÍ. ÉF YOUR APPLICATION IS GOING TO ALLOW INTERRUPTS IN OTHER MEMORY MAP CONFIGURATIONS, USE THE "ÉNTERRUPT ÈANDLING ÒEFERENCE ÎOTES" SECTION OF THIS DOCUMENT TO CUSTOMIZE THIS INSTALLATION ROUTINE. ÉNSERT THE FOLLOWING CONSTANTS AND SUBROUTINE INTO THE INITIALIZATION PHASE OF YOUR APPLICATION, FOR IT TO RUN PROPERLY UNDER ÇEOÄEBUGGER. ÉN THE CONSTANT DEFINITION PORTION OF YOUR PROGRAM: ÄÅÖÅÌÏÐÍÅÎÔ = ÔÒÕÅ ;ÓET TO ÔÒÕÅ IF YOU SOMETIMES RUN THIS ;APPLICATION UNDER ÇEOÄEBUGGER Ö2.0, ;AND RUN IT UNDER THE DESKÔOP OTHER TIMES. ;ÓET TO ÆÁÌÓÅ IF YOU WILL NEVER RUN THIS ;APPLICATION UNDER ÇEOÄEBUGGER Ö2.0. ÔOÉNTÓVC = $0367 ;ÁDDRESS OF ÇEOÄEBUGGER VECTOR WE MODIFY ÉN THE INITIALIZATION PORTION OF YOUR PROGRAM: ;************************************************************************* ; ÉNITÉNTÓVC ; ; ÔHIS ROUTINE MODIFIES THE ÉÒÑ VECTOR, SO THAT THE USER'S INTERRUPT ; SERVICE ROUTINE IS CALLED INSTEAD OF THE ÇÅÏÓ INTERRUPT SERVICE ROUTINE. ; ÔHIS ROUTINE CAN ASSEMBLE ONE OF TWO WAYS, DEPENDING UPON THE ; VALUE OF THE CONSTANT CALLED "ÄÅÖÅÌÏÐÍÅÎÔ". ; ; ÁSSUMPTIONS: ; 1) ÔHAT THE STANDARD ÇÅÏÓ MEMORY MAP IS PRESENT WHEN THIS ROUTINE RUNS. ; 2) ÔHAT YOUR APPLICATION DOES NOT DO ANYTHING WEIRD SUCH AS ALLOWING ; INTERRUPTS WHEN HIGH-MEMORY ÒÏÍ OR ÒÁÍ BANK 0 (ON THE Ã128) IS ; SWAPPED IN. ; ; ÓIDE-EFFECTS: ; 1) ÉF THE FOLLOWING SCENARIO APPLIES: ; - YOU ARE WRITING A NON-ÇÅÏÓ APPLICATION FOR THE Ã64 ; - WHICH TRIES TO DISABLE INTERRUPTS WHEN ÒÏÍ IS IN ; - YOU RUN IT UNDER ÇEOÄEBUGGER ; - YOUR PROGRAM SWAPS ËERNAL ÒÏÍ IN, WITHOUT PROPERLY ; DISABLING INTERRUPTS ; - AN INTERRUPT OCCURS ; ...THEN ÇEOÄEBUGGER ×ÉÌÌ PROPERLY RUN YOUR ÉÓÒ, WITHOUT GIVING ; YOU ANY WARNING THAT THERE IS A BUG IN YOUR PROGRAM, AND THAT IT ; WOULD HAVE CRASHED IF IT WAS NOT RUN UNDER ÇEOÄEBUGGER. ; ; ÁUTHOR: ÅRIC Å. ÄEL ÓESTO ÁPRIL 1988 ; ÃALLED BY: INITIALIZATION CODE ; ÐASS: NOTHING ; ÒETURNS: NOTHING ; ÁLTERS: ACCUMULATOR AND FLAGS ; ;************************************************************************ ÉNITÉNTÓVC: SEI ;DISABLE INTERRUPTS .IF ÄÅÖÅÌÏÐÍÅÎÔ ;------------------------------------------------ ;ÁSSEMBLE THE FOLLOWING CODE WHEN YOU WANT YOUR APPLICATION TO RUN CORRECTLY ;UNDER ÇEOÄEBUGGER Ö2.0. LDA ÉÒÑ_ÖÅÃÔÏÒ+1 ;CHECK HIGH BYTE OF EXISTING ÉÒÑ VECTOR ;TO SEE IF WE ARE RUNNING UNDER DEBUG. BMI 50$ ;SKIP IF NOT... ;WE ARE RUNNING UNDER ÇEOÄEBUGGER: MUST STORE OUR ÉÒÑ VECTOR TO ;THE ÇEOÄEBUGGER CODE IN THE $0334 AREA. ÉF RUNNING IN Ã128 MODE, ;THIS ONLY MODIFIES THE WEDGE CODE IN BANK 1, WHICH IS SUFFICIENT. ÌOAD× ÔOÉNTÓVC,#ÍYÉNTÓVC CLI ;ENABLE INTERRUPTS RTS ;ALL DONE 50$: ;WE ARE NOT RUNNING UNDER ÇEOÄEBUGGER: SET UP NEW ÉÒÑ VECTOR ;IN NORMAL FASHION. .ENDIF ;(ÄÅÖÅÌÏÐÍÅÎÔ)--------------------------------------------------- ;ÁT THIS POINT, WE KNOW THAT EITHER THE APPLICATION IS NOT RUNNING UNDER ;ÇEOÄEBUGGER, OR THAT WE DON'T EXPECT IT TO RUN UNDER ÇEOÄEBUGGER (THE CASE ;WHERE ÄÅÖÅÌÏÐÍÅÎÔ = ÆÁÌÓÅ). ÉNTERRUPTS HAVE ALREADY BEEN DISABLED ABOVE. ;ÓET UP THE ÉÒÑ VECTOR AT $ÆÆÆÅ TO POINT TO NEW SERVICE ROUTINE. ÎOTE THAT ;IN Ã128 MODE, THIS ONLY AFFECTS THE ÉÒÑ VECTOR IN BANK 1 ÒÁÍ. ÌOAD× ÉÒÑ_ÖÅÃÔÏÒ,#ÍYÉNTÓVC CLI ;ENABLE INTERRUPTS RTS ;ALL DONE ÓTRAY ÉNTERRUPT "ÔÒÁÐ" ÆACILITY ------------------------------- ÙOU WOULD EXPECT THAT AN APPLICATION WHICH OFTEN HAS TO SWAP IN THE ËERNAL ÒÏÍ WOULD BE CAREFUL TO DISABLE INTERRUPTS DURING THESE OPERATIONS. ÔHIS IS TO PREVENT THE CASE WHERE AN ÉÒÑ OCCURS AND ÇÅÏÓ INTERRUPT CODE HAS BEEN SWAPPED OUT OF THE MEMORY MAP. ÏFTEN, IT IS EASY FOR SUCH A PROVISION TO BE LEFT OUT IN THE INITIAL IMPLEMENTATION OF A PROGRAM. ÔO CATCH THESE HARD-TO-FIND BUGS, ÇEOÄEBUGGER HAS A "STRAY ÉÒÑ TRAP" FACILITY. ÔHIS FACILITY SERVES TO WARN YOU WHEN AN INTERRUPT HAPPENS AND THE MEMORY MAP IS CONFIGURED IN A MANNER YOU DID NOT EXPECT. ÉF YOU ARE RUNNING A ÇÅÏÓ APPLICATION (WITH NORMAL ÇÅÏÓ INTERRUPTS), THEN THIS FACILITY WILL STOP PROGRAM EXECUTION AND DISPLAY THE "*** ÅXECUTION STOPPED ***" MESSAGE WHEN AN ÉÒÑ OCCURS AND THE ËERNAL ÒÏÍ IS SWAPPED IN. ÙOU CAN EXAMINE THE Ðà REGISTER TO SEE WHICH OF YOUR ROUTINES WAS EXECUTING WHEN THE ÉÒÑ OCCURRED, AND CAN ADD INTERRUPT-DISABLING CODE WHERE NECESSARY. ÉF YOU ARE WRITING A NON-ÇÅÏÓ APPLICATION WHICH RUNS ON THE Ã128, AND SETS UP ITS OWN INTERRUPT SERVICE ROUTINE, YOU WILL PROBABLY DESIGN IT SO INTERRUPTS ARE ENABLED ONLY WHEN THE MEMORY IF CONFIGURED IN A SPECIFIC WAY. ÈERE ARE SEVERAL EXAMPLES OF ASSERTIONS YOU MIGHT FIND IN SUCH AN APPLICATION: - "É WILL ONLY ALLOW INTERRUPTS WHEN BANK 1 ÒÁÍ IS MAPPED IN." - "É WILL ONLY ALLOW INTERRUPTS WHEN BANK 0 ÒÁÍ OR ÒÏÍ IS MAPPED IN." ÂY REFERING TO THE "ÉNTERRUPT ÈANDLING ÒEFERENCE ÎOTES" SECTION OF THIS DOCUMENT, AND ADDING SOME CODE TO THE INITIALIZATION PORTION OF YOUR PROGRAM, YOU CAN ALTER THE WEDGE CODE SO THAT A ÔÒÁÐ IS PRODUCED IF AN INTERRUPT OCCURS WHEN THE MEMORY MAP IS IN AN UNEXPECTED CONFIGURATION. (ÉS IT POSSIBLE TO CONTINUE PROGRAM EXECUTION AT THIS POINT???) ÉNTERRUPT ÈANDLING ÒEFERENCE ÎOTES ÉF YOU ARE WRITING A NON-ÇÅÏÓ APPLICATION, THE FOLLOWING TABLES PROVIDE USEFUL REFERENCE INFORMATION ABOUT THE VECTORS IN ÇEOÄEBUGGER'S WEDGE CODE. ÂY ADDING CODE TO YOUR APPLICATION WHICH CHANGES THESE VECTORS, YOU CAN GET YOUR INTERRUPT SERVICE ROUTINE TO WORK WHEN YOUR APPLICATION IS RUNNING UNDER ÇEOÄEBUGGER. ÙOU CAN ALSO SET THESE VECTORS SO THAT A ÔÒÁÐ OCCURS IF AN INTERRUPT HAPPENS WHEN THE MEMORY MAP IS SUCH THAT YOUR APPLICATION WOULD CRASH. Ã64 ÍODE -------- ÌABEL ÁDDR ÎORMAL ÃONTENTS ÍODIFIED ÃONTENTS --------------- ------- ------------------------------- ------------------------ ÒOMÉÒÑ_ÖEC: $0338 JMP ÔRAPÒÏÍ 4à 45 03 JMP ÈANDLEÉÒÑ 4à 5Å 03 - AS IT STANDS, THIS LOCATION WILL CAUSE A ÔÒÁÐ WHENEVER AN ÉÒÑ HAPPENS AND THE ËERNAL ÒÏÍ IS MAPPED INTO HIGH MEMORY. ÍODIFY THIS LOCATION IF YOU WANT EXECUTION TO CONTINUE TO THE ÔOÉNTÓVC VECTOR WHEN ÒÏÍ IS MAPPED INTO HIGH MEMORY. ÔHE ÔOÉNTÓVC VECTOR CAN THEN DIRECT EXECUTION TO YOUR ÉÓÒ. ÔOÉNTÓVC: $ØØØØ JMP ÇEOSÉÓÒ 4à XX XX JMP ÙOUR_ÉÓÒ 4à ÌÌ ÈÈ -OR- JMP ÔRAPÉÒÑ 4à ØØ ØØ - AS IT STANDS, THIS LOCATION DIRECTS EXECUTION TO THE ÇÅÏÓ ÉÓÒ WHEN AN INTERRUPT OCCURS. ÙOU CAN MODIFY THIS VECTOR TO POINT TO YOUR OWN ÉÓÒ, OR FORCE A ÔÒÁÐ WHEN AN ÉÒÑ OCCURS. ÎOTE THAT IF ÒOMÉÒÑ_ÖEC POINTS TO ÈANDLEÉÒÑ, THEN THE ÔOÉNTÓVC VECTOR HANDLES ALL ÉÒÑ INTERRUPTS, REGARDLESS OF WHETHER ÒÁÍ OR ÒÏÍ IS IN. Ã128 ÍODE --------- ÌABEL ÁDDR ÎORMAL ÃONTENTS ÍODIFIED ÃONTENTS --------------- ------- ------------------------------- ------------------------ (IN BANK 0) ÒOMÉÒÑ_ÖEC: Â0$ØØØØ JMP ÔRAPÒÏÍ 4à ØØ ØØ JMP ÈANDLEÉÒÑ 4à ØØ ØØ - AS IT STANDS, THIS LOCATION WILL CAUSE A ÔÒÁÐ WHENEVER AN ÉÒÑ HAPPENS AND THE ËERNAL ÒÏÍ IS MAPPED INTO HIGH MEMORY. ÍODIFY THIS LOCATION IN BANK 0 ÒÁÍ IF YOU WANT EXECUTION TO CONTINUE TO THE ÔOÉNTÓVC VECTOR WHEN ÒÏÍ IS MAPPED INTO HIGH MEMORY. ÔHE ÔOÉNTÓVC VECTOR CAN THEN DIRECT EXECUTION TO YOUR ÉÓÒ. (IN BANK 0) ÔOÉNTÓVC: Â0$ØØØØ JMP ÇEOSÉÓÒ 4à XX XX JMP ÙOUR_ÉÓÒ 4à ÌÌ ÈÈ -OR- JMP ÔRAPÉÒÑ 4à ØØ ØØ - AS IT STANDS, THIS LOCATION DIRECTS EXECUTION TO THE ÇÅÏÓ ÉÓÒ WHEN AN INTERRUPT OCCURS ÁÎÄ BANK 0 IS VISIBLE IN THE $0300 AREA. ÙOU CAN MODIFY THIS VECTOR TO POINT TO YOUR OWN ÉÓÒ, OR FORCE A ÔÒÁÐ WHEN SUCH AN ÉÒÑ OCCURS. ÎOTE THAT IF ÒOMÉÒÑ_ÖEC POINTS TO ÈANDLEÉÒÑ, THEN THIS BANK 0 ÔOÉNTÓVC VECTOR WILL ADDITIONALLY HANDLE ÉÒÑ INTERRUPTS WHICH OCCUR WHEN ÒÏÍ IS MAPPED INTO HIGH MEMORY. (IN BANK 1) ÔOÉNTÓVC: Â1$ØØØØ JMP ÇEOSÉÓÒ 4à XX XX JMP ÙOUR_ÉÓÒ 4à ÌÌ ÈÈ -OR- JMP ÔRAPÉÒÑ 4à ØØ ØØ - AS IT STANDS, THIS LOCATION DIRECTS EXECUTION TO THE ÇÅÏÓ ÉÓÒ WHEN AN INTERRUPT OCCURS ÁÎÄ BANK 1 IS VISIBLE IN THE $0300 AREA. ÙOU CAN MODIFY THIS VECTOR TO POINT TO YOUR OWN ÉÓÒ, OR FORCE A ÔÒÁÐ WHEN SUCH AN ÉÒÑ OCCURS. ÎÍÉ (ÒESTORE KEY) ÉNTERRUPTS ×HEN ÇEOÄEBUGGER IS EXECUTING USER CODE, WE SET UP THE ÎÍÉ VECTORS SO THAT THE ÒÅÓÔÏÒÅ KEY CAN STOP EXECUTION AT ANY POINT AND BRING US INTO THE MONITOR. ÎOTE THAT THIS INVOLVES THREE ÎÍÉ VECTORS: Â1$ÆÆÆÁ, Â0$ÆÆÆÁ, AND Â0$318 FOR ÎÍÉS WHICH OCCUR WHEN ÒÏÍ IS MAPPED INTO THE $FFFA AREA. ×HEN THE MONITOR IS RUNNING, WE SET UP THE CURRENT BANK'S $ÆÆÆÁ ÎÍÉ VECTOR SO THAT THE USER CAN HIT THE ÒÅÓÔÏÒÅ KEY TO QUIT ANY OPERATION. ÔHIS IS IMPLEMENTED AS "SET-FLAG AND POLL-FLAG-AND-STOP WHEN YOU CAN" SO THAT CRUCIAL OPERATIONS (SUCH AS INSERTING A SYMBOL) ARE NOT INTERRUPTED. ÔO SIMPLIFY MATTERS, WE DISABLE ÎÍÉ INTERRUPTS DURING CONTEXT SWITCHING (STARTING OR STOPPING AN APPLICATION). ÔHIS IS ACCOMPLISHED BY MODIFYING THE WEDGE CODE SLIGHTLY SO THAT IF AN ÎÍÉ OCCURS WHEN WE DON'T WANT IT TO, THE WEDGE CODE IMMEDIATELY RETURNS. ÉN BOTH Ã64 AND Ã128 MODES, THERE IS ONLY ONE LOCATION IN THE WEDGE CODE WHICH MUST BE MODIFIED. (ÔHIS IS TRUE ON THE 128 BECAUSE NO MATTER WHICH ENTRY POINT IS USED TO GET INTO THE WEDGE CODE: ÒAMÎÍÉ_Â0, ÒAMÎÍÉ_Â1, OR ÒOMÎÍÉ_Â0, EXECUTION ENDS UP AT THE POINT LABELED ÓKIPÔOÒETURN IN THE WEDGE CODE IN BANK 1. ÔHEREFORE WE ONLY NEED TO ALTER THE WEDGE CODE AT THAT POINT, AND NOT IN BOTH BANKS.) ÎOTES: 1) Ö1.0 ÇEOÄEBUGGER USED TO DISABLE ÎÍÉ INTERRUPTS DURING CALLS TO ÇÅÏÓ INTERRUPT CODE. ÔHE MOTIVATION FOR THIS IS THE IDEA THAT WHEN THE USER HITS THE ÒÅÓÔÏÒÅ KEY, HE DOES NOT WANT TO STOP EXECUTION IN THE MIDDLE OF ÇÅÏÓ INTERRUPT CODE. Ö2.0 ÇEOÄEBUGGER DOES NOT DO THIS ANYMORE BECAUSE WE DO NOT WANT TO LOCK-OUT THE ÒÅÓÔÏÒÅ KEY WHILE THE USER'S INTERRUPT SERVICE ROUTINE IS RUNNING. ÁND BESIDES, WHAT IS THE STOPMAIN COMMAND FOR ANYWAY? 2) CONCERNING ÎÍÉ BOUNCE: - WHEN THE ÒÅÓÔÏÒÅ KEY IS PRESSED, TWO ÎÍÉ SIGNALS AREA GENERATED, ABOUT 150USEC APART. 3) ÃONCERNING PREVENTING ÎÍÉS WHICH IMMEDIATELY FOLLOW A ÂÒË INSTRUCTION: - WE HANDLE THIS CORRECTLY 4) ÏN BOTH THE 64 AND 128, THE ÃÉÁ2 CHIP HAS THE CAPABILITY OF GENERATING AN ÎÍÉ SIGNAL. ÔO PREVENT THIS FROM OCCURING DURING DISK-ACCESS ROUTINES, THE ÇÅÏÓ ÉNITÆORÉÏ ROUTINE FORCES THE ÃÉÁ2 TO GENERATE ONE INTERRUPT BY SETTING THE TIMER VALUE TO A LOW NUMBER LIKE 1. ÉNITÆORÉÏ KNOWS THAT IT WILL GET CONTROL WHEN THIS FORCED-ÎÍÉ OCCURS BECAUSE IT SWAPS THE KERNAL ÒÏÍ INTO THE HIGH- MEMORY AREA AND SETS THE KERNAL'S PAGE 3 ÎÍÉ VECTOR (NMIVEC, $0318) TO POINT TO A DUMMY ÎÍÉ ROUTINE. - ON THE Ã64, THIS WORKS FINE, EXCEPT FOR THE FACT THAT ÇEOÄEBUGGER'S VECTOR AT $0318 GETS TRASHED BY ÉNITÆORÉÏ. - ON THE Ã128, ÉNITÆORÉÏ DOES NOT SWAP ÒÏÍ IN CORRECTLY (IT IS CHANGING LOCATION $0001). ÓO WHEN IT FORCES THIS ÎÍÉ TO OCCUR, THE 6510 USES THE VECTOR AT Â1$ÆÆÆÁ OR Â0$ÆÆÆÁ, AND WE END UP IN THE DEBUGGER. ÔO SOLVE THIS PARTICULAR PROBLEM, É HAVE ADDED CODE TO Ö2.0 TO POLL THE ÃÉÁ2 CHIP AFTER AN ÎÍÉ OCCURS TO SEE IF IT WAS THE ÒÅÓÔÏÒÅ KEY OR THE ÃÉÁ2 CHIP. ÉF IT WAS THE ÃÉÁ2 CHIP, ÇEOÄEBUGGER QUICKLY RETURNS TO THE APPLICATION. ÈANDLING ÎÍÉS FROM THE ÃÉÁ CHIP IN THIS MANNER IS A GOOD IDEA IN GENERAL, ON BOTH THE Ã64 AND THE Ã128. ÉT ALLOWS THE USER TO WRITE PROGRAMS WHICH USE THE ÃÉÁ2'S ÎÍÉ CAPABILITY WITHOUT WORRYING ABOUT THE DEBUGGER GETTING CONFUSED. ÂUT NOTE THAT THE USER'S APPLICATION WILL NOT RUN AS EXPECTED: ANYTIME THE ÃÉÁ2 GENERATES AN ÎÍÉ, THE DEBUGGER WILL GET CONTROL, POLL THE ÃÉÁ2 TO SEE THAT IT IS RESPONSIBLE, AND WILL RETURN TO THE APPLICATION. ÔHE APPLICATION WILL HAVE NO WAY OF KNOWING THAT AN ÎÍÉ OCCURRED, SINCE NOT ONLY DID WE STEAL THE ÎÍÉ INTERRUPT, WE ALSO CLEARED THE ÃÉÁ2 INTERRUPT STATUS REGISTER JUST BY POLLING IT. ÔHAT'S LIFE IN THE BIG CITY! ;************************************************************************* ; ÄOÒBOOT ; ; ÔHIS COMMAND DOES WHAT THE "ÒÂÏÏÔ" ICE MACRO DOES: IT PULLS THE ENTIRE ; ÇÅÏÓ KERNAL IN FROM ÒÅÕ BANK #0. ; ; ÔALKED TO ÄOUG 6/6/88: ; ÉF THE CURRENT DRIVE IS A ÒÁÍ ÄÉÓË WHEN THIS COMMAND IS INVOKED, ; THE DESKÔOP WILL COME UP OK. ÔHE DRIVE WHICH IS SELECTED WILL DEPEND ; UPON A COPY OF CURÄRIVE WHICH IS STORED IN THE ÒÅÕ. (ÙOU CAN CHANGE ; THIS COPY USING ÓELECTÐRINTER FROM THE DESKÔOP.) ; ; ÉF THE CURRENT DRIVE IS NOT A ÒÁÍ ÄÉÓË WHEN THIS COMMAND IS INVOKED, ; THEN THE DESKÔOP WILL NOT COME BACK UNTIL THE PHYSICAL DRIVE IS ; TURNED OFF AND BACK ON AGAIN. ; ; ÔHE ONLY WAY TO IMPROVE THIS WOULD BE FOR THE DEBUGGER TO CALL ; ÅXITÔURBO TO LET GO OF THE PHYSICAL DRIVE. ÂUT SINCE WE ARE NOT ; SURE THE ÅXITÔURBO CODE IS STILL IN MEMORY, THAT IS A BAD IDEA. ; ×E CAN'T CLOSE THE ÅXITÔURBO CODE, BECAUSE IT IS DIFFERENT FOR ; EVERY DIFFERENT DISK TYPE. ; ×E MAINTAIN TWO SEPARATE MEMORY POINTERS: Ðà (ACTUAL PROGRAM COUNTER), AND Ìà (ADDRESS FOR OPEN COMMANDS). ÅACH POINTER INCLUDES ADDRESS AND MEMORY ENVIRONMENT INFORMATION. ÎEW COMMANDS: ÓÕÐÅÒ ÍÉÎÉ USAGE --------------- --------------- ----------------------------------------------- INITVIEW -- COPY Ðà ADDR AND BANK INFO TO Ìà SETVIEW SV SET ÌÃ'S BANK INFO VIEW VW DISPLAY CURRENT Ðà AND Ìà ADDRESS AND BANK INFO USEVIEW UV CHANGE ÐÃ'S BANK INFO TO WHAT IS IN Ìà B1 B1 SAME AS VIEW ($7Å,$00) B0 B0 SAME AS VIEW ($3Å,$00) --------------- --------------- ----------------------------------------------- SETVIEW, VIEW, AND USEVIEW ARE PRIMITIVES POSSIBLE USAGES: VIEWING OTHER BANKS AND PROCEEDING FROM OLD Ðà AND BANK: ADDRESS BANK INFO --------------- ------------------- A ADDRESS Ìà = ADDRESS SETVIEW XX,XX ÌÃB = NEW BANK INFO A ADDRESS, ETC... Ìà = ANYTHING ÌÃB = ANYTHING GO USES Ðà ADDRESS AND BANK INFO SETTING A NEW Ðà AND BANK: ADDRESS BANK INFO --------------- ------------------- VIEW XX,XX ÌÃB = NEW BANK INFO PC ADDRESS Ðà = NEW ADDR ÐÃB = ÌÃB - OR - PC ADDRESS Ðà = NEW ADDR VIEW XX,XX ÌÃB = NEW BANK INFO USEVIEW ÐÃB = ÌÃB CHANGING ÐÃ'S BANK INFO WITHOUT CHANGING Ðà ADDRESS ADDRESS BANK INFO --------------- ------------------- VIEW XX,XX ÌÃB = NEW BANK INFO USEVIEW ÐÃB = ÌÃB CHANGING Ðà ADDRESS WITHOUT CHANGING BANK INFO: ADDRESS BANK INFO --------------- ------------------- PC Ìà = Ðà ÌÃB = Ðà (ONLY REQUIRED IF HAVE CHANGED Ìà SINCE ÒÅÓÔÏÒÅ KEY) PC NEW ADDRESS Ðà = NEW ÐÃB = Ìà ÐOSSIBILITY FOR FUTURE ÖÉÅ× COMMAND: WHEN INVOKED WITHOUT ARGUMENTS, DIPLAYS: - ÓÐÌÉÔ ÉÎÔÏ Ðà ÁÎÄ Ìà ÃÏÌÕÍÎÓ - ÁDDRESS ÒANGE ÒAM ÂANK ÖISIBLE ÏVERRIDE ------------- ---------------- -------- $ÆÃ00 - $ÆÆÆÆ 1 ÒÏÍ $Æ800 - $ÆÂÆÆ 1 ÒÏÍ $Æ000 - $Æ7ÆÆ 1 ÒÏÍ $Å000 - $ÅÆÆÆ 1 ÒÏÍ $Ä000 - $ÄÆÆÆ 1 É/Ï $Ã000 - $ÃÆÆÆ 1 $Â000 - $ÂÆÆÆ 1 $Á000 - $ÁÆÆÆ 1 $9000 - $9ÆÆÆ 1 $8000 - $8ÆÆÆ 1 $7000 - $7ÆÆÆ 1 $6000 - $6ÆÆÆ 1 $5000 - $5ÆÆÆ 1 $4000 - $4ÆÆÆ 1 $3000 - $3ÆÆÆ 1 $2000 - $2ÆÆÆ 1 $1000 - $1ÆÆÆ 1 $0800 - $0ÆÆÆ 1 $0400 - $07ÆÆ 0 $0000 - $03ÆÆ 0 USE PRINT HEX WORD ROUTINE, ADDING $0FFF TO GET RIGHT SIDE START INCREMENT AT $0400, OFFSET AT $03ÆÆ ONCE GET TO $1000, INC = $1000, OFFSET = $0ÆÆÆ ÈOW ÇEOÄEBUGGER MANAGES MACHINE-DEPENDENT MEMORY-MAP ENVIRONMENT INFORMATION ÔHE DEBUGGER CARRIES MEMORY-MAP ENVIRONMENT INFORMATION, WHICH IS MACHINE- DEPENDENT, AROUND IN GENERIC VARIABLES SUCH AS APPÂANKÉNFO1 AND APPÂANKÉNFO2. ÔHIS WAY, THE ROUTINES WHICH JUST MOVE THIS INFORMATION AROUND (BUT DON'T DIRECTLY USE IT) ARE MACHINE-INDEPENDENT. ÅXECUTION ÅNVIRONMENT: ×HEN THE DEBUGGER STOPS EXECUTION OF AN APPLICATION (ÒÅÓÔÏÒÅ PRESSED OR ÓÂÐ HIT), THE USER'S "EXECUTION ENVIRONMENT" IS SAVED. ÔHIS INCLUDES: PROCESSOR REGISTER AND FLAG VALUES Ðà ADDRESS CURRENT BANK INFORMATION ZERO PAGE VARIABLES STACK INFORMATION ×E CALL THE Ðà ADDRESS AND ITS MEMORY-MAP INFORMATION THE "ÅXECUTION ÅNVIRONMENT" OR MORE SIMPLY, THE "Ðà POINTER". ÖIEWING ÅNVIRONMENT: ÏNCE THE DEBUGGER HAS STOPPED AN APPLICATION, THE "VIEWING ENVIRONMENT" IS THE SAME AS THE "EXECUTION ENVIRONMENT". ÔHIS MEANS THAT ALL OF THE MEMORY EXAMINATION AND MODIFICATION COMMANDS USE THE SAME MEMORY-MAP INFORMATION AS THE ÅXECUTION ÅNVIRONMENT. ÔHROUGH USE OF THE ÓÅÔÖÉÅ× COMMAND, THE VIEWING ENVIRONMENT CAN BE CHANGED. ÙOU CAN SET UP A NEW MEMORY-MAP CONFIGURATION, AND THEN USE THE MEMORY EXAMINATION AND MODIFICATION COMMANDS TO READ/WRITE MEMORY IN THIS NEW CONFIGURATION. ×HEN YOU GIVE THE ÇÏ COMMAND TO RESUME EXECUTION, THE DEBUGGER RESTORES THE EXECUTION ENVIROMENT, AND YOUR PROGRAM CONTINUES EXECUTION. ×E CALL THE VIEWING ADDRESS AND ITS ENVIRONMENT THE "Ìà POINTER". ------------------------------------------------------------------------------- ÁSPECTS OF ÇEOÄEBUGGER WHICH MUST CHANGE ACCORDING TO MACHINE-DEPENDENCIES IN Ö2.0, TO REMAIN COMPATIBLE WITH Ö1.0. (ËILL THESE IN Ö3.0.) ÒEGISTER COMMAND: DISPLAYS Ðà ADDRESS, HIGHLIGHTS ADDRESS IF EFFECTIVE ADDRESS OF Ðà (CONSIDERING Ðà BANK INFO) IS BANK 0. DISPLAYS ÃÐÕ_ÄÁÔÁ VALUE (ÉT REALLY SHOULD NOT DO THIS ANYMORE, BUT É AM TRYING TO MAINTAIN COMPATABILITY WITH Ö1. 64: READ DIRECTLY FROM APPÂANKÉNFO1 128: [7-3,0]: DIRECT READ FROM MEMORY [21]: SHADOW WITH APPÃÐÕ_Â21 ÒEGISTER ÏPEN ÃOMMAND: ..INCLUDES ÍÍ REGISTER: IS ÃÐÕ_ÄÁÔÁ. (ÔO BE COMPATIBLE WITH Ö1) 64: DIRECTLY READ/WRITE TO APPÂANKÉNFO1 128: [7-3,0]: DIRECTLY Ò/× TO MEMORY [21]: SHADOW WITH APPÃÐÕ_Â21 ------------------------------------------------------------------------------- ÁSPECTS OF ÇEOÄEBUGGER WHICH ARE MACHINE-INDEPENDENT. ÍEMORY EXAMINATION AND MODIFICATION: BANK COMMAND: AFFECTS ÌÃ'S BANK INFO: CURÂANKÉNFO1 AND CURÂANKÉNFO2 OPEN MODES: USES ÌÃ'S BANK INFO HIGHLIGHTS ADDRESS IF IS IN PHYSICAL BANK 0 DUMP COMMAND: USES ÌÃ'S BANK INFO HIGHLIGHTS ADDRESS IF IS IN PHYSICAL BANK 0 MOVE/FILL/DIFF/FIND: USES ÌÃ'S BANK INFO HIGHLIGHTS ADDRESS IF IS IN PHYSICAL BANK 0 @ AND @@ OPERATORS: USES ÌÃ'S BANK INFO ÓINGLE AND ÔOP-STEP BREAKPOINTS: MAINTAIN THEIR OWN BANK INFORMATION (COPIED FROM Ðà BANK INFO BEFORE EXECUTION BEGUN) ÓOFTWARE ÂREAKPOINTS: MAINTAIN THEIR OWN BANK INFORMATION (COPIED FROM Ðà BANK INFO BEFORE EXECUTION BEGUN) Ðà COMMAND: WITHOUT ARGUMENT: COPY Ðà ADDRESS AND BANK INFO TO Ìà (RESTORES EXECUTION ENVIRONMENT) WITH ARGUMENT: (SAME AS SETTING Ðà IN OPEN MODE) SET Ðà ADDRESS = ARGUMENT SET Ðà BANK INFO = Ìà BANK INFO ×OULD BE NICE: Ö3.0: MAKE ÒÅÕ SUPER MONITOR HAVE OPTION TO USE 32Ë BACKRAM FOR SYMBOL TABLE... ×OULD BE COOL IF DEBUGGER COULD CHECKSUM RAM EXPANSION TO SEE IF IS ALREADY UP THERE (SO COULD ASSEM, LINK, DEBUG, ASSEM, LINK, DEBUG REALLY QUICKLY WHEN GEOÄEBUG IS ON DISK, AND NOT ON RAMDISK). ×HY NOT WAIT TILL JUST AFTER INTERRUPT CODE RUNS TO DISABLE INTERRUPTS BEFORE GOING TO USER'S CODE? ×OULD FLICKER A BIT LESS. ×ARN USER IF WHEN WE BREAK HIS ÓÐ IS SO LOW THAT MONITOR CODE WILL WRAP IT AROUND... ÉF ÎÍÉ COULD REALIZE WHAT IT INTERRUPTED AND COULD MAKE REPAIRS SO A ÇÏ WOULD NOT CRASH US. ÉF THE TOP-STEP COMMAND COULD RECOGNIZE CALLS TO MOST OF THE ÇÅÏÓ INLINE ROUTINES AND STOP AND WARN THE USER WHAT IS ABOUT TO HAPPEN. ÂEGIN AND ÅND STRUCTURES IN MACROS. ÉF AND FOR MACROS COULD SKIP TO NEXT "END". ÍIGHT EVEN ADD COUNTER SO COULD BE SEVERAL LEVELS DEEP. ÃLEAN UP ENTIRE S/T/P/GO CONDITIONED/LEAP-FROGGED STRUCTURE ÃLEAN UP ENTIRE OPEN MODE THING ÃLEAN UP MOVE/DIFF/FILL/FIND ÁDD INTELLIGENCE TO PARSE MACRO SO THAT IF ARGS ARE THERE BUT NOT EXPECTED, GENERATES ERROR. ALLOW MACRO DEFS WHICH ARE BIGGER THAN SIZE OF INPUT BUFFER? (ESPECIALLY WHEN LOADING FROM FILE.)