Download An 8080 Simulator for the 6502, KIM-1 Version [1978]
Transcript
Dann McCreary AN 8 0 8 0 SIM ULATO R for the 6 50 2 KIM-1 VERSION ******************************************************** * * * * * AN 8&8{? SIMULATOR FOR THE 6602 USER’ S MANUAL KIM - 1 VERSION * * * * * * * COPYRIGHT (C) 1978 8Y DANN MCCREARY * * * ******************************************************** THE 8 0 8 0 SIMULATOR ENABLES A 6 5 0 2 MICROPROCESSOR TO EXECUTE THE 80 80 INSTRUCTION SET, THE SIMULATOR DOES THIS BY INTERPRETING 80 8 0 INSTRUCTIONS IN A NORMAL PROGRAM SEQUENCE. ALL INTERNAL 8 0 8 0 REGISTERS ARE AVAILABLE FOR EXAMINATION AT ANY T IM E, THEY MAY BE VIEWED STATICLY IN A 3INGLE-STEP MODE OR DYNAMICLY IN A TRACE MODE, ALL 8080 SOFTWARE FEATURES ARE PRESENTLY SUPPORTED WlTH THE EXCEPTION OF DIRECT MEMORY ACCESS (D M A) , THIS SIMULATOR VFR8I0N RUNS ON A BASIC KjM - 1 , IN IT S MINIMUM CONFIGURATION, THE 8080 SIMULATOR PROVIDES SINGLE STEP AND FULL SPEED MOOES ANO LEAVES 227 BYTFS OF MEMORY OPEN FOR 8080 PROGRAMS, ALTERNATIVE RUN MODE FEATURES TAKE UP ADDITIONAL (OPTIONAL) MEMORY SPACE, THE CASSETTE TAPE INCLUDED IN THIS PACKAGE I S RECORDED IN STANDARD KIM * 1 FORMAT, THE PURCHASER OF THIS PACKAGE IS HEREWITH GRANTED PERMISSION TO MAKE ONE COPY FOR HIS/HER OWN PERSONAL USE* RETAINING THE ORIGINAL AS A BACKUP, THE AUTHOR WELCOMES ANY FEEDBACK FROM SIMULATOR USERS AND WILL BE PLEASED TO RESPOND TO SPECIFIC QUESTIONS WHICH ARE ACCOMPANIED 8Y A STAMPFD, SELF-ADDRESSED ENVELOPE, ADDITIONAL COPIES ARE AVAILABLE# CONSISTING OF A KIM - 1 FORMAT CASSETTE TAPE* A USER MANUAL AND A COMPLETE# WELL COMMENTED ASSEMBLY LEVEL SOURCF/OBJECT L I S T I N G , PRICED AT # 2 0 , 0 0 ♦ # 1 , 5 0 POSTAGE & HANDLING (CALIFORNIA RESIDENTS PLEASE ADD 6X SALES T A X ) , THEY MAY BE ORDERED FROM ****************************** * * * ,DANN MCCREARY P, 0 ,B O X 1 6 4 3 5 - 3 SAN DIEGO, CA 9 2 l l 6 * * * ****************************** AS AN ADEQUATE TREATMENT OF THE INSTRUCTION SET AND PROGRAMING TECHNIQUES FOR THE 8080 MICROPROCESSOR 18 BEYOND THE SCOPE OF THIS MANUAL# I T IS SUGGESTED THAT THE USER AQUIRE THE » 8 0 8 0 / 8 0 8 5 ASSEMBLY LANGUAGE PROGRAMMING MANUAL" FROM I N T E L , ACKNOWLEDGEMENT* THANKS TO GARY DAVIS FOR GENEROUS SUPPORT IN THE FORM OF ACCESS TO HIS 8 0 8 0 SYSTEM AND HIS AS3I8TANCE IN RUNNING COMPARISON TESTS, INTRODUCTION WHY IMITATE ONE MICROPROCESSOR wlTH ANOTHER? YOU PROBABLY PURCHASED THIS 8080 SIMULATOR PACKAGE TO DO ONE OR MORE OE THE FOLLOWING* *RUN EXISTING 8080 SOFTWARE ON YOUR 6b02 - W R IT E , TEST AND DEBUG YOUR OWN 8080 SOFTWARE WITHOUT HAVING TO PURCHASE A COMPLFTE 8080 BASED SYSTEM -LEARN SOMETHING ABOUT THE ARCHITECTURE AND INSTRUCTION SET OF THE 8080 VIA HANDS-ON EXPERIENCE 0Y SPENDING A L IT T L E TIME wlTH THIS MANUAL AND GOING THROUGH THE STEP BY STEP " F IR S T TIME AROUND" PROCEEDURE, YOU WILL SOON BE DOING ALL THlS AND MORE, LATER, WHEN YOU KNOW THE C A P A B I L I T I E S AND L IM IT AT IO NS OF THE SIMULATOR, YOU HAVE THE OPTION OF RELOCATING IT PERMANENTLY IN ROM, THE ESSENT!AL PART OF THE 8080 SIMULATOR IS THE SUBROUTINE CALLED " S I M 8 0 " , EACH TIME THIS SUBROUTINE I S CALLED, ANOTHER 8080 INSTRUCTION IS EXECUTED, PROGRAMS QF VARYING COMPLEXITY MAY CALL AND USE " S I M 8 0 " , DEPENDING ON YOUR OBJECTIVES, A TYPICAL EXAMPLE OF SUCH A PROGRAM IS INCLUDED ON PAGE THREE OF THE SIMULATOR PROGRAM L I S T l N G 3 , I N CONJUNCTION WITH A SIMPLE SET OF SWITCHES, IT PROVIDES FOR EASY SELECTION OF RUN, TRACE OR SINGLE STEP MOOES AND BREAPOINT OPERATION, ALTERNATELY, THE SIMULATOR MAY B6 RUN IN A MINIMUM MODE IN ORDER TO LEAVE A 6PFATER AMOUNT OF **EMORY FOR 8080 PROGRAMS, AFTf-P STUDYING THESE CALLING PROGRAMS YOU MAY WISH TO DESIGN YOUR OWN SPECIAL PURPOSE CALLING PROGRAM, FOP EXAMPLF, TRY A "SUPER BREAKPOINT" PROGRAM, ALL SIMULATED 8080 REGISTERS ARE MAINTAINED IN RAM, YOU CAN MONITOR THFM BETWEEN 8080 INSTRUCTIONS AND FORCE A BREAKPOINT ON THE BASIS OF A PARTICULAR PATTERN, I / O HANDLING IS FACILITATED BY A SPECIAL INSTRUCTION DESIGNED INTO THE SIMULATOR, THE " C 6 S " INSTRUCTION ENABLES YOU TO CALL 65 02 CODED SUBROUTINES FROM YOUR 8080 PROGRAM, WITH SLIGHT PRECAUTIONS, THEN, YOU CAN USE ALL YOUR SYSTEM MONITOR'S SUBROUTINES, INCLUDED IN THE SIMULATOR LIS TI NG S 18 AN 8080 TIME*OF*DAV CLOCK PROGRAM, BY USING THE SIMULATOR TO RUN THIS PROGRAM, YOU WILL SEE BY EXAMPLE ALL THE VARIOUS MODES AND FEATURES PROVIDED BY THE 8080 SIMULATOR, SO, WHY NOT GET STARTED? TAPE LOADING INSTRUCTIONS THE 8080 SIMULATOR KI M - 1 FORMAT CASSETTE TAPE CONSISTS OF 4 BLOCKS OF PROGRAMS AND OATA, BLOCK 1 TS THE 8080 REGISTER AREA AND INTERPRETER ROUTINES# ADDRESSES # I 0 0 E 3 TO #S 03F F, BLOCK 2 IS THE M* iN CONTROL LOOP# ADORESSES # $ 1 7 8 0 TO #S17E6 BLOCK 3 IS THE OPTIONAL EXFCUTTVE AND INTERRUPT AREA# ADDRESSES # $ 00 7 6 TO # S 0 0E 2, BLOCK 4 IS A SAMPLE 8080 PROGRAM, THE KIM DATA BLOCK I , D . ADDRESSES # $ 00 0 0 TO # $ 00 7 5 FOR ALL BLOCKS IS # $ 8 0 , LOADING PROCEEDURE ACTION SEE DISPLAYED (1) *POWER ON KTM & CASSETTE INTERFACE* (2) *REWIND CASSETTE* (3) PUSH (RS1, fADl (4) PUSH rDA)# (5) PUSH (6) PUSH (7) *START CASSETTE PLAYER* (8) PUSH rAOj, (9) PUSH IG01 (10) *DISPLAY RELIGHTS* (14) *REPEAT STEPS 8 - (15) PUSH (16) PUSH ' fDA1 , (17) PUSH f A D l #17FA 17FA XX (18) PUSH (D A ], 17FA 80 (19) PUSH [♦ ) (20) PUSH 17 00F1 XX 00 00F1 00 fAD1# l7F 9 !7F9 XX (DA), 80 17F9 80 00F1 1873 1873 A9 BLANK DISPLAY fAD] # 0 0 F i FF 80 0000 XX 10 FOP REMANING BLOCKS* 00F1 00 0 0 F 1 FF 17FB XX 17FB 17 OPERATING INSTRUCT!0N8 TO F A M I L I A R I Z E YOURSFLF WITH 8P80 SIMULATOR OPERATION LOAD TAPE BLOCKS 1 * 4 AND WORK YOUR WAY THROUGH THE FOLLOwlNG INSTRUCTIONS, ONCE THE TAPE IS LOADED, BE SURF TO PUT * $FF AT ADDRESS # S 0 0 F 1 , NOW LOAD THE MINIMUM CONFIGURATION INTERRUPT VECTORS* «$80 INTO LOCATION #*17FA AND #$17 INTO # S l 7 F B , THIS IS THE NMI VECTOR WHICH IS ACTIVATED BY THE lSTJ KEY ON K IM , LOAD # * 2 2 INTO #S17FE * # $ l C INTO # S l 7 F F FOR THE IRQ VECTOR, MINIMUM CONFIGURATION SINGLE STEP MODE CHANGE LOCATIONS # S l7 8 E - # * 1 7 9 0 TO # $ 4 C , # $ 2 2 , # $ l C , T H E PROGRAM COUNTER SHOULD CONTAlN #$ 0000 ( # * 0 0 IN LOCATION #S00EF AND # * 0 0 IN LOCATION #S00F0 ) , IT POINTS TO THE FIRST BYTE OF 8080 PROGRAM AREA WHICH NOW CONTAINS A SAMPLE 8080 PROGRAM, LOOK AT LOCATION #S00EF, THE LOW ORDER BYTE OE THE PROGRAM COUNTER, PUSH THE fST l KEY AND YOU W I l L SEE I T CHANGE FROM # * 0 0 TO # $ 0 3 , EACH SUBSEQUENT OPERATION OF THE ISTJ KEY WILL ADVANCE THE SIMULATOR THPOUGH ANOTHER PROGRAM STEP, WITH THE DEMO PROGRAM L IS T I N G TN HAND YOU CAN VERIFY THAT THE PROGRAM IS FOLOWING ITS PROPER SEQUENCE, BETWEEN EACH PROGRAM STEP CONTROL IS RETURNED TO THF KIM MQNlTOR PROGRAM, THIS MAKES I T POSSIBLE TO VIEW OR CHANGE THE CONTENTS OF ANY SIMULATED 8080 REGISTER, FOR INSTANCE , LOOK AT LOCATION #S 00E 5, THIS IS THE 8080 ACCUMULATOR, NOW CONTINUE PRESSING THE tSTl KEY AND YOU CAN WATCH DATA MOVING lNTO THE AC CUMULATOR, BEING INCREMENTED AND SO ON, BY USING THE IDAJ AND HEX KEYS BETWEEN PROGRAM STEPS YOU CAN MODIFY THAT DATA TO SEE WHAT EFFECT THAT MAY HAVE ON PROGRAM EXECUTION, NOTE* THIS PROGRAM INTFRACT8 WITH THE KIM DISPLAY BUFFER, SO BE PREPARED FOR THE DISPLAY TO CHANGE AFTER THE PROGRAM REACHES ADDRESS # S 0 02 B . PC SINGLE STEP THE 8080 PROGRAM COUNTER IS LOCATED ON PAGE ZERO IN THE SAME PLACE KIM MONITOR ROUTINES STORE THE 6502 PROGRAM COUNTER, I F YOU PUSH THE TPC1 KEY BETWEEN INSTRUCTION STEPS, YOU WILL SEE THF CURRENT 8080 PROGRAM ADDRESS AND OP-COOE DISPLAYED, BY PLACING_#S4C,#SDC,#SlC AT ADDRESS # S l 7 8 E » # $ 1 7 9 0 , THIS WILL BE DONE FOR YOU BY THE KIM MONITOR, RUN MODE TO RUN THE SAMPLE PROGRAM AT FULL SPEED JUST CHANGE THE DATA AT LOCATION #S178E » # $17 90 TO # * 5 8 , # * D 0 , # S E F , NOW WHEN YOU PUSH tSTl THE SIMULATOR W R L START AND CONTINUE RUNNING UNTIL YOU PUSH (RS1 OR ACTIVATE THE I R S , USING THE IR 0 IS RECOMMENDED, A8 tRSl WILL INTERRUPT THE SIMULATOR, LEAVING IT S REGISTERS IN AN UNKNOWN STATE, NOTE* MINIMUM CONFIGURATION DOES NOT SUPPORT INTERRUPTS BUT I T DOES EXECUTE INTERRUPT»RELATED INSTRUCTIONS, ILLEGAL OP-CODES & BREAKPOINTS WHF* THE 8080 SI*ULATOR ENCOUNTERS AN ILLEGAL OP-CODE, A JUMP WILL RE FORCED TO THF SYSTEM MONITOR, lN THE MINIMUM CONFIGURATION THIS MAY BF- USED TO ADVANTAGE BY INSERTING AN ILLEGAL OPwCODE (TRY #S10) IN PLACF OF ANY OP-CODE IN YOUR 8080 PROGRAM, THIS WILL ACT AS A BREAKPOINT, TO CONTINUE OPERATION AFTER A BREAKPOINT * REPLACE THE ORIGINAL OP-COOE, SUBTRACT I FROM THE 8080 PROGRAM COUNTER, AND CONTINUE NORMALLY, (NOTE* DO NOT USE #$CB AS A BREAK,) OPTIONAL FEATURES USING THE SIMULATOR’ S OPTJONAL FEATURES REQUIRES THE ILLUSTRATED SWITCHING ARRANGEMENT CONNECTED TO KIM PORT PB, IN PARTICULAR, DO NOT ATTEMPT TO USE THE INTERRUPT SUBROUTINE WITHOUT THE APPROPRIATE SETUP. OMMTTTING THE MODE CONTROL SWITCHES HOwEVER <WILL ONLY RESULT IN A DEFAULT TO THE SINGLE STEP MODE, WITH SWITCHES CONNECTED, PUT # t B D , # * 0 0 INTO # St 7 FA 1 #S 17FB, PUT # * 5 8 , # * 6 0 , #*EA BACK INTO # * J 7 8 F - # * 1 7 9 0 , REGISTER SINGLE STEP MODE SET MODE CONTROL SWITCHES (LEFT TO RIGHT) TO REGISTER, STEP & STEP, THIS POSITION IS IOENTICAL lN OPERATION TO THE MINIMUM CONFIGURATION SINGLE STEP MOOE, REGISTER TRACE MODE SET CONTROL SWITCHES TO REGISTER, TRACE & STEP, WHEN YOU ACTIVATE THE (ST) KFY THE SIMULATOR #TLL BEGIN EXECUTING 8080 INSTRUCTIONS AT A RATE DETERMjNFO BY THE TIME-DELAY VALUE STORED IN "SP EED ", ADDRESS # S0 0E 2, PROGRAM COUNTER TRACE MODE SET CONTROL SWITCHES TO PC, TRACE & STEP, NOW THE DISPLAY WII.L TRACE THE PROGRESS OF THE 8080 PROGRAM COUNTER AND THE 8080 PROGRAM OP-CODES, PROGRAM COUNTER SINGLE STEP MOOE SET CONTROL SWITCHES TO PC» STEP * STEP, NOW PUSHING THE IS REQUIRED TO ADVANCE THE PROGRAM COUNTER, tST1 KEY TRACE SPEED TRACE SPEED MAY BE SET BY INSERTING A VALUE IN " 8 P E E 0 " , # * 0 0 E 2 , A VALUE OF # * 0 0 GIVES THE SLOWEST TRACE, AND # * 0 1 THE FASTEST, RUN MODE MOVE THE RUN SWITCH TO "R U N ", PUSH (ST1 AND YOUR PROGRAM WILL RUN AT FULL SPEED, TRY SETTING THE DEMO PROGRAM CLOCK BY KEYING IN THE TIME IN RAPID SUCCESSION, MOVE THE RUN SWITCH BACK TO REVERT TO TRACE OR SINGLE STEP, INTERRUPT ACTION INSERT #S20# 0 9 7 6 , #S00 AT #S179F * #S17AJ TO USE INTERRUPTS, IS BROUGHT HIGH AN 8080 INTERRUPT WILL OCCUR (NOTEt THE PB7 INTERRUPT l I N E MUST BE HELP HIGH THROUGH AT LEAST ONE SIMULATOR CYCLE FOR AN INTERRUPT TO TAKE PL AC E) , NO INTERRUPT ACKNOWLEDGE LINE IS PROVIDED - IP ONE IS REQUIRED, INSERT AN OUTPUT INSTRUCTION JUST BEFORE "N O IN T " IN THE INTERRUPT LOGIC ON PAGE 2 OF THE L I S T I N G S , WHEN PB7 THE " I N T F " INTERRUPT FLAG ( ADDRESS * S 0 0 E 3 ) IS OPPOSITE IN SENSE FROM THE 8080 INTERRUPT FLAG * I , E . # I T DISABLES INTERRUPTS WHEN SET TO ONE AND ENABLES THEM wHEN SET TO ZERO, I T ALSO GOES THROUGH A TRANSITION STATE OF #SFF AFTER AN " E I " INSTRUCTION IS EXECUTED, THE RESULTANT ACTION, HOWEVER, IS IDENTICAL TO THAT OF AN ACTUAL 8 0 8 0 . THfc INTERRUPT VECTOR IS SET BY SWITCHES AT PB 3 , 4 # & 5 , THF 8080 "HALT " INSTRUCTION *S76 WILL CAUSE AN 0080 HALT, T N AN ACTUAL 8 0 8 0 , THE PROCESSOR HALTS WITH THE PROGRAM COUNTFR POINTING TO THE NEXT INSTRUCTION IN SEQUENCE, ON THE SIMULTOR, HOWEVER# IN ORDER TO MAINTAIN CONTROL AND TO KEEP MONITORING FOR SIMULATED INTERRUPTS, A #S76 WILL RESULT IN NO ADVANCEMENT OF THE PROGRAM COUNTER - RATHER# THE * 8 7 6 wTLL BE RFPEATEDLY EXFCUTED UNTlL AN INTERRUPT 18 DETECTED OR UNTIL THF SIMULATOR I S HALTED EXTERNALLY, AFTER AN INTERRUPT IS SERVICED, EXECUTION WILL CONTINUE WITH THE INSTRUCTION IMMEDIATELY FOLLOWING THF HALT, BREAKPOINT OPERATION THE 8080 SIMULATOR ALLOWS MULTIPLE BREAKPOINTS, STORE THESE BREAKPOINT ADDRESSES IN "BKTB L"# A RAM AREA, START PROGRAM EXECUTION IN THE NORMAL MANNER, WHEN THE PROGRAM REACHES THE BREAKPOINT A JUMR WILL BE FORCED, RETURNING CONTROL TO THE KIM MONITOR, YOU MAY NOW EXAMINE OR MODIFY ANY 8080 REGISTERS, TO CONTINUE OPERATION, ALL THAT IS REQUIRED IS TO PUSH t S T ) , THE SIMULATOR WILL RUN UNTIL THE NfXT BREAK IS ENCOUNTERED, "B KTBL" MAY BE EXPANDED UP TO 128 ENTRIES, SIMULATOR I / O HANDLING NORMAL SIMULATOR I / O INSTRUCTIONS ARF HANDLED VIA " I O T B L * , TMXS IS A TABLE OF ADDRESSES OF lNPUT/OUTPUT PORTS, NOTE THAT THESE I / O ADDRESSES ARE STORED IN NORMAL ORDER, I , E , , MOST SIGNJFIGANT ADDRESS . F I R 3 T , THE SIMULATOR ASSUMES THAT THERE IS A DATA DIRECTION REGISTER AT THE PORT ADDRESS M , I F YOU ASSIGN RAM LOCATIONS AS SIMULATED I / O PORT ADDRESSES# 2 LOCATIONS MUST BE ALLOWED FOR EACH PORT, THE FIRST ENTRY IN " I O T B L " W l l L BE 0080 PORT 0 , THE SECOND ENTRY WILL BE 8080 PORT 1# AND SO ON UP TO A MAXIMUM OP PORT 1 2 7 , THIS VERSION OF THE SIMULATOR ASSIGNS A L l I / O INSTRUCTIONS TO KIM PORTS A & SA, PORT SA 13 ALSO SHARED BY THE KIM KEYPAD# 30 TO AVOID INTERFERENCE DO NOT USE THE KEYBOARD (EXCEPT FOR ( S T M WHILE INPUT INSTRUCTIONS ARE BEING USED, THE 8080 "RST" INSTRUCTION THE SIMULATOR SENDS RST CALLS TO PAGE ZERO# AS DOfcS THE 8 0 8 0 , I F HOWEVER YOUR PAGE ZERO IS TAKEN up WITH MONITOR ROUTINES# ETC,# THE RESET PAGE MAY BF CHANGED BY CHANGING " R S T H I " FROM #S00 TO WHATEVER PAGE YOU WISH, I T IS LOCATED AT ADDRESS #S01B0 ON PAGE 9 OF THE SIMULATOR L I S T I N G S , THE " C A L L 6 b 0 2 " # OR " C 6 5 * OP*CODE THE SIMlJLATOR APPROPRIATES ONE OF THE 8 0 8 0 ’ S UNIMPLEMENTED OP«* CODES FOR SPECIAL USE, I T I S #SCB, AND TAKES THE FORM "CB XXXX"# WHERE XXXX 13 THE ADORESS - 1 OF ANY 6502 SUBROUTINE, SUBROUTINES WHICH DON’ T REQUIRE ANY PARAMETERS MAY BE CALLED DIRECTLY, SUBROUTINES WHICH REQUIRE SOM£ DATA PASSED TO OR FROM THEM MUST BE PRFFACED OR ENDFD wlTH COOE TO MOVE THF REQUIRED DATA INTO OR OUT OF APPROPRIATE 808O REGISTERS, SEE AS A N EXAMPLE THE "DSK8D" SUBROUTINE ON PAGE 20 OF THE PROGRAM L I S T I N G S , I T DOESN’ T NEED ANY DATA PASSFD TO IT# BUT MUST RETURN A KEY VALUE IN A, BE SURF TO SPECIFY THE ADDRESS MINUS ONE ( A D D R , - 1 ) WHEN USING "C6b*, RELOCATION INFORMATION THE 8080 SIMULATOR IN I T 8 MINIMUM CONFIGURATION DOES NOT RELY ON ANY KIM MONITOR SUBROUTINES PER-8E, RATHER# CONTROL 18 PASSED BACK AND FORTH BETWEEN THE SIMULATOR AND THE KIM MONITOR, I T IS EASILY RELOCATED WlTMlN A KIM SYSTEM AND EASILY ADAPTED TO OTHER NON v K I M 6502 SYSTEMS, THE SIMULATOR CAN BE RELOCATED IN ROM WITH THE EXCEPTION OF THE REGISTER AREA AND OTHER ZERO*PAGE VARIABLES, I F YOU DON’ T HAVE ACCESS TO AN ASSEMBLER BUT WOULD L IK E TO PUT THE SIMULATOR IN HIGH MEMORY, LEAVE THE RELATIVE POSITIONS OF THE MAJOR ROUTINES (# S 0 1 0 0 « * S 0 3 F F ) THE SAME# AND JUST BE SURE TO CHANGE ALL THE HIGH ORDER ADDRESSES ( I , E , , THE THIRD BYTE OF ANY THREE BYTE JN8T RUC TI0N ,) TO USE THF 8080 SIMULATOR TN A NON » KIM 6502 SYSTEM ADDITIONAL MODIFICATIONS ARE NECESSARY, ALL PROGRAM LINES WHICH REFERENCE KIM MONITOR-RESIDENT DATA HAVE THE WORD * K I M " SOMEWHERE IN THE COMMENT AREA, THESE INCLUDE I / O ADDRESSES AND SUBROUTINE CALLS, I / O ADDRESSES SHOULD BE CHANGED TO AVAILABLE PORTS IN YOUR SYSTEM, ONE SUBROUTINE CALL IS TO SCANO, SCAND IS A MONITOR SUBROUTINE wHICH DISPLAYS THE ADDRESS SPECIFIED BY * P O l N T L " AND *POINTH" ALONG WXTH THE DATA BYTE AT THAT ADDRESS, SUBSTITUTE A SIMILAR DISPLAY ROUTINE FROM YOUR SYSTEM MONITOR, GETKEY READS A ONE BYTE VALUE FROM K I M ’ S HEXADECIMAL KEYPAD, ANY COMPARABLE INPUT ROUTINE IN YOUR MONITOR WILL 00# GENERAL OPERATING CONSIDERATIONS 6502 ADDRESSING MODES MAKE HEAVY USE OF ZERO*PAGE RESOURCES AND SINCE PAGE ONE 18 USED FOR A STACK? 8080 PROGRAMS MUST BYPASS THESE AREAS, IF THE 8080 APPLICATION PROGRAM YOU WISH TO RUN USES #S00E0 * *S00FF OR * S 0 l F 0 TO #S01FF? RELOCATE THAT PORTION OF THE PROGRAM IN ANOTHER AREA AND PROVIDE JUMPS TO AND FROM THE NEW AREA, SIMULATOR PROGRAMS RUN CONSIDERABLY SLOWER THAN THE SAME PROGRAM WOULD RUN ON ACTUAL 8080 HARDWARE, THIS IS? OF COURSE? BECAUSE THE SIMULATOR MUST EXECUTE MANY 6502 INSTRUCTIONS IN THE COURSE OF EXECUTING ONE 8080 INSTRUCTION, DON I T EXPECT BLINDING SPEEDI ON THE OTHER HAND? TJME DEPENDENT EVENTS OF MODERATE FREQUENCY fSUCH AS THE INCLUDED CLOCK PROGRAM) CAN BE HANDLED REASONABLY W£LL» IP YOU INTEND TO TRANSFER PROGRAMS TO AN ACTUAL 8080 BASED SYSTEM? BE SURE TO MAKE ALLOWANCES IN YOUR TIME DELAY ROUTINES, FOR HIGHLY TIME DEPENDENT EVENTS, USE THE * C 6 5 " INSTRUCTION TO HANDLE THEM IN 6502 CODE, UNLIKE AN ACTUAL 8080 PROCESSOR, SIMULATOR REGISTERS ARE MAINTAINFD IN MFMORY, THIS REQUIRES CARE THAT YOUR 8080 PROGRAM NOT ACCESS OR MODIFY THESE REGISTERS, THE SAME ALSO HOLDS TRUE FOR THE SIMULATOR PROGRAM I T S E L F , AVOID REFERENCING ANY SIMULATOR PROGRAM AREA FROM YOUR 8080 PROGRAM, IP VOU SUSPECT THIS MAY HAVE HAPPENED? RELOAD THE SIMULATOR FROM TAPE, AN EASY TRAP FOR 8080 PROGRAMMERS TO FALL INTO IS *ACCIDENTAL I N I T I A L I Z A T I O N " OF REGISTERS, THESE ARE THE SYMPT0M3l YOU HAVE COMPLETED WORK ON AN 8080 PROGRAM, I T RUNS PERFECTLY ON THE SIMULATOR, YOU LOAD IT INTO THE TARGET SYSTEM? HIT "GO" AND NOTHING HAPPENS, WHY? TO OPERATE PROPERLY YOUR 8080 PROGRAM MAY REQUIRE THAT ONE OR MORE RFGISTERS 8E I N I T I A L I Z E D TO CERTAIN VALUES OR RANGES OF VALUES, THE SIMULATOR REGISTERS MAY BE PRE*SET TO THOSE CONDITIONS FROM PRIOR OPERATION, THUS YOUR PROGRAM MAY RUN ON THE SIMULATOR EVEN THOUGH IT HAS NO INSTRUCTIONS TO PROPERLY I N I T I A L I Z E THOSE REGISTERS, THIS MAY EVEN HAPPEN ON YOUR TARGET SYSTEM, DUE TO RANDOM VARIATIONS FROM ONE PROCESSOR CHIP TO ANOTHER, EACH PROCESSOR MAY "COME UP" WITH DIFFERENT RANDOM VALUES lN U N I N I T I A L I Z E D REGISTERS, THE RESULT?, YOUR PROGRAM WORKS FINE WITH SOME PROCESSORS BUT NOT AT ALL wITH OTHERS, TO AVOID THIS PITFALL? TAKE THESE STEPS| BEFORE EACH SERIOUS EVALUATION OF AN 8080 PROG*AM RELOAD THE 8080 REGISTER AREA TO A POWER*ON CONFIGURATION WITH RANDOM DATA IN THE REGISTERS, TRV SEVERAL PROGRAM RUNS WITH OIFFERENT RANDOM DATA lN THE REGISTERS AT STARTUP, THIS WILL ASSURE YOU THAT YOUR I N I T I A L I Z A T I O N 8EQUENCE8 ARE WORKING A8 YOU EXPECT, 8080 SIMULATOR E3 REGISTER E5 E4 INTE MAP E6 M A PSW wmmmmmmmmmmmm^mtmmmtmmmmm^mammmmmmmmmmmm E7 E8 H L — — EB EC EE EF F0 Copyright © 19 78 by Dann Mc Creary \ PCH PCL CONTROL \ SPH SPL ----------------------------------------------------- \ B ED v \ D E c \ \ -, , . . \ j CONFIGURATION PAGE 1 8080 SIMULATOR (C) 1978 BY DANN| MCCRFARY *** **************** ******************** **************** * * * * * * * * * * * * AN 8080 SIMULATOR FOR THE 6502 * * * * * * * * * * * ******************* KTM*) VERSION ******************* ******************************************************* * THIS PROGRAM SIMULATES THE OPERATION OF 8080 MICRO* PROCESSOR SOFTWARE ON A KIM - 1 6502 MICROCOMPUTER, * IN ORDER TO SIMPLIFY RELOCATION TO ANOTHER NON » * KIM ftb02 SYSTEM, LINES DEPENDENT ON KIM MONITOR * RESIDENT DATA ARE FLAGGED WlTH THE *iORD * K I M * IN * THE COMMENT F I E L D , *******+ +******#**#+****+ + +*#***♦***+ ****+**#********** * * * * * * * * * COPYRIGHT (C) 1978 BY DANN MCCREARY * * * * * * * * * ******************************************************* * ALL RIGHTS RESERVED, REPRODUCTION BV ANY MEANS * PR USE OF THIS PROGRAM OR ANY PART THEREOF * FOR THE PROMOTION OR SALE OF MlCROCUMPUTER * HARDWARE OR SOFTWARE WITHOUT EXPRESS WRITTEN * PERMISSION OF THE AUTHOR I S PROHIBITED, ******************************************************* * SYMBOL DEFIN ITIONS * EQU GETKEY SCAND EQU SCANDS FOU PADD EOU PA EQU SADD EQU SA EQU PBDD EQU PB EQU MNITOR EQU PCCMO FQU REGS EQU EQU HL EQU PC INST f3 U CQU (H L) (DE) EQU (SP) EQU (PC) EQU (D E C IT ) EQU ( I N C l T ) EQU (PNT> EQU tSCR> EQU SMA3K EQU PMASK EQU CMASK EQU ZMA8K FQU EQU SINC MIN3PD EQU HALT EQU BKTBLN EQU NOBRK €QU RSTHI EQU INPG2 FQU IN TD IS EQU | * K I M * KEYPAD SUBROUTINE *S lF 6A | * K I M * DISPLAY SUBROUTINE #StF19 # S lF lF | * K I M * DISPLAY SUBROUTINE #$1701 ; * K I M * PORT A DATA D I R , REG, | * K I M * PORT A DATA #S1700 #$1741 | * K I M * PORT SA DATA D I R , REG, #$ 17 4 0 | * K I M * PORT SA DATA | * K I M * PORT B DATA D I R , REG, # $ 17 0 3 | * K I M * PORT B DATA #$ 17 0 2 # S lC 2 2 | * K I M * RESET t NTRY TO MONITOR #SlCDC | * K I M * PC SINGLE STEP ENTRY 18080 REG, BASE ADDR, A I HL REGISTER PAIR L I 8080 PROGRAM COUNTER PCL I CURRENT 8080 INSTRUCTION SCR HL-REGS I INDEXES TO REGISTERS, ETC. DE*REGS 8P-RE63 PC-REGS DECIT*REGS INCIT**REQ3 PNT*RE65 SCR*REGS #$80 I ISOLATES SIGN B I T FROM PSW #$04 I ISOLATES PARITY B IT #$01 I ISOLATES CARRY BIT #$40 IISOLATES ZERO B IT |FOR INR/DCR #$01 «$00 ISETS MINIMUM TRACE SPEED #S76 16060 HALT OP*CODE ENDBK-BKTBL lLENGTH OF BRKPNT TABLE #SFFFF IDUMMY BREAKPOINT ENTRY #$00 IHIGH ORDER 8080 RST VECTOR #$02 I SECOND PG OF INTERP, ROUTINES #$01 !DISABLES INTERRUPTS PAGE 2 8080 SIMULATOR (C) 19 78 BV DANN MCCREARY *******K IM -1 17FA INTERRUPT VECTORS ORG *S!7FA t7PA 8000 NMI OC 2, START ) *KIM* NON-MASKABLE TNTERRUPT 17FC FFFF RESET DC 2, #SFFFF I*K IM * RESET VECTOR MINIMUM CONFIGURATION V E C T O R S * * * * * * * *l7FA 8 017 NMI DC 2, MNSTRT f *KIM * NON-MASKABLE INTERRUPT *17FC FFFF RESET OC 2, 6SFFFF | *KIM* RESET *l7FE 221C IRQ OC 2, MNTTOR |*K IM * IRQ VECTOR ******************************************* 0 076 ORG *S0076 8080 INTERRUPT L O G I C * * * * * * * 0076 0077 0079 007C 007D 0080 0 082 0 084 0 086 0 088 008A 008B 0080 008F 0091 0 092 0 094 0 0 95 0 0 96 0 0 98 0 099 009A 009C 009D AA A9 80 A8 AO 25 10 84 09 85 88 A5 00 C6 8A 00 88 90 00 68 18 69 40 60 INT 01 0317 0217 E3 07 E3 C7 FE fc3 02 E3 NOINT NINT 01 NOHLT 05 03 •» NRMRET TAX LDAIM ST A TAY LDA ANOZ 0PL STYZ ORAIM STAZ OEY LDAZ SNE DECZ TXA BNF DEY TYA 8NE PLA CLC ADCIM PHA RTS iS01 PBOO PB INTE NOINT INTE *SC7 INST INTE NINT INTE NOHLT NRMRET #S03 I SAVE HALT DATA IREAD INTERRUPT PORT |*K IM * IUSE TO SET INTE |*K IM * I IN T E * F F I F ENABLED lINTERR UP Tt IYES# DISABLE FURTHER INTERRUPTS |FORM RST INSTRUCTION f SAVE NE* INSTRUCTION I INDICATE INTERRUPT TAKEN ) ENABLE INTERRUPT | WAS THIS A HALT? IYES | NORMAL RETURN? IY E S , GO RETURN INO* CHANGE RETURN TO IPOINT PAST j 8 R INCPC PAGE 3 8080 SIMULATOR (C) 19 7 0 BV OANN MCCREARY * * * * * * * O P T I O N A L EXECUTIVE L O O P * * * * * * * * * * * * * * * * * E N T E R AT " S T A R T * * * * * * * * * * * * 009E 00A0 A6 E2 85 FE TRACE 00A2 00AS 00A7 20 1 9 i E C6 FE 00 F9 TRA 00A9 00AB 00AO 0060 00B2 00B4 00B7 00B9 00BA 00BB A2 A5 00 00 A5 00 F0 CA CA 00 00BD 00BF 00C0 LDAZ STAZ SPEEO SCR IGET 8PEE0 VALUF JSR OECZ BNE SCAND SCR TRA I * K I M * DISPLAY I TIMEOUT? | N 0 , KEEP DISPLAYING LDXIM LOAZ CMPX BNE LOAZ CMPX REQ DEX OEX BNE BKT8LN PCL BKTBL^2 NXBK PCM BKTBL*t MONIT ILOAD TABLE LENGTH IGET L0 PC BYTE IDOES I T MATCH? I NO I GET HI PC BYTE IDOES I T MATCH? | Y E 8 I GO TO MONITOR | N 0 , TRY NEXT BREAK BKLP I MORE A2 FF START 9A 20 8317 LDXIM TXS JSR *IF F ISET STACK POINTER 3IM80 IDO ONE 8080 00C3 00C5 00C8 00CB A9 80 AO 29 LDAIM STA lOA ASDIM INSET PBOD PB *107 f SET FOR INPUT |*K lM * | * K I M * READ CONTROL PORT lONLY TEST CONTROL SNITCHES 00CD 00CE 00D0 00D1 4A 90 09 4A 00 06 LSRA BCC L3RA BNE REG 0003 00D5 0007 0 009 A5 85 A5 85 LOAZ STAZ LOAZ STAZ PCL POINTL PCH POINTH |N0» MOVE PC TO POINT | *KIM* 00DB 9 000 90 Cl 4C 2 2 t C BCC JMP TRACE MNITOR >TRACE? | * K I M * NO, 8TEP 02 BRK EF 8KLP DE00 07 F0 DF00 24 NXBK EE 00 0 317 0 2 17 07 EF FA F0 FB REG MONlT BRK ' IN ST R , lFULL SPEEO? IY E S , GO RUN | N 0 * REGISTER MOOE? IYES# SKIP PC UPDATE |*K IM * PAGE 4 8080 SIMULATOR (C) 19 7 8 BY OANN MCCREARY BREAKPOINT ADDRESS TABLE 00E0 00E2 FFFF BKT8L ENOBRK DC 2 , NOBRK | BREAKPOINT TABLE INEXT ADDRESS AFTER TABLE 00E2 00 SPEEO DC MINSPD !SETS TRACE SPEED *THE FOLLOWING ITEMS ON THIS PAGE MUST BE LOCATED IN PAGE 0 RAM MEMORY* *THEY MUST REMAIN IN ORDER ANO BEGIN ON AN 0D0 BOUNDRY* 8080 R E G I S T E R S * * * * * * * 00E3 00E4 00E& 00E6 00E7 00E 8 00E9 00EA 00EB 00EC 00ED 00EE 00EF 00F0 01 02 00 00 00 00 00 00 00 00 74 00 00 00 INTE PSW A M L H E 0 C B SPL SPH PCL PCH DC DC DC OC DC DC DC DC DC DC OC OC OC DC INTD !S #$02 #$00 #S00 # $00 #$00 #$00 «$00 #$00 «$00 #$74 # $00 #$00 # 800 lINTERRUPT ENABLE FLAG ! 8 0 8 0 PROCESSOR STATUS ! 6 0 8 0 ACCUMULATOR ! DUMMY MEMORY REGISTER !HL REGISTER PAIR IDE REGISTER PAIR !BC REGISTER PAIR 18080 STACK POINTER I 8080 PROGRAM COUNTER * * * * * * * C O N S T A N T S ANO OATA A R E A * * * * * * * *NOTEI # S 0 0F t MUST BE SET TO «800 WHEN READING OR WRITING* *TAPES ANO MANUALLY SET TO #8FF 8EF0RE SIMULATOR OPERATION* 00F1 00F3 00F5 00F6 00F7 00F8 00F9 00FA 00FB 00FC 00FE FFFF 0100 00 00 00 00 00 FA 00 0 100 0001 DECIT INCIT FLAG DESTOA OEST SRC POINTL POINTH PNT SCR OC 2» OC 2* DC OC OC DC OC OC DC DC DC #SFPFP # S 0 00 t #$00 #$00 #$00 #$00 #$00 «$FA #$08 #80001 #80100 !DOUBLE PRECISION *1 !DOUBLE PRECISION 1 !USED BY SIMULATOR !DESTINATION DATA !DESTINATION INDEX !SOURCE lNOEX ! * K I M * DISPLAY BUFFER ! * K I M * DISPLAY POINTER !*K IM * !DATA POINTER !SCRATCHPAD REGISTER PAGE 9 8090 SIMULATOR 1780 (C) 1978 ORG BV DANN MCCREARY # $ 17 6 0 MAIN CONTROL L O O P * * * * * * * 1780 1782 A2 FF 9A 1783 20 9 1 1 7 SIM80 1786 1788 178A |7 8C 178E !7 8 F 1790 A9 29 09 85 58 60 EA MN8TRT E4 D7 02 E4 EX IT LDXIM TX8 #SFF >SET STACK POINTER . IFOR MINUHUM CONFIGURATION JSR MAIN lEXECUTE ONE 8 0 8 0 OP^CODE LDAZ ANOIM ORAIM STAZ CLI RTS NOP PSW #S07 #$02 PSW |GET 8080 STATUS ICLEAR PRECLEAR BITS ISET PRESET BITS I SAVE I T lALLOW INTERRUPTS I RETURN TO CALLER > * * * * V A R I A T I 0 N 8 FOR MINIMUM iC O N F I G U R A T I O N * * * * * * * *178F *t78E 4C 221C 4C DClC JMP JMP MNITOR PCCMO *t78E *l78F 58 00 EF CLI BNE MNSTRT 1791 1792 78 08 1793 A2 00 LDXIM #$00 !LOAD INDEX 1795 1797 A1 E7 89 E6 LDAIX STAZ HL M f FETCH MEMORY 1799 A1 EF LOAIX PCL fFETCH INSTRUCTION 179B 1790 179F l7A l 85 FE 49 76 F0 04 EA STAZ EORIM BEQ NOP INST MALT ITR ISAVE I T I I S THIS A HALT? |YES» DON*T UPDATE PC MAIN I * K I M * REGISTER SINGLE STEP | * K I M * PC SINGLE STEP lFULL SPEED PUN lOON'T ALLOW INTERRUPTS ICLEAR DECIMAL MODE 8EI CLO » * * * * V A R ! A T l O N FOR INTERRUPT A C T I O N * * * * * * * M79F 20 7600* JSR INT | 6 0 CHECK FOR INTERRUPT 17A2 20 8 3 0 3 JSR INCPC fNO, 17A5 17A7 A2 02 A5 FE LDXIM LDAZ #S02 INST |SET COUNTCR/lNOEX >RECOVER INSTRUCTION ITR INCREMENT PC PAGE 6 8080 17A9 17AA l7AC 17AE 1700 17B1 17B2 1783 1784 1785 48 29 49 95 68 4A 4A 4A CA DO 17B7 SIMULATOR (C) 1978 8Y DANN MCCREARY PHA ANDIM EORIM STAZX PLA LSRA LSRA LSRA DEX BNE DIV ) DEC COUNTER/INOEX ILOOP T I L L DONE 86 F5 STXZ FLAG ?CLEAR FLAG 17B9 t78B 17BC 17BE A0 02 4A B0 08 F0 0E LDYIM l3RA ecs 0EQ INPG2 17C0 17C2 l7 C 4 17Cb 17C7 t7C9 A9 65 AA A9 85 F0 17CB 17CC 88 A9 07 2ND 17CE 17D0 1701 65 F8 AA E8 1ST 1702 17D3 17D4 17D7 98 MQVE 48 80 E303 48 TYA PHA LDAX PHA 17D8 170A A6 F8 84 ES I7DC 17DE !7E0 A6 F7 85 ES 85 F6 «3 A9 44 48 8A 40 17E2 17E4 17E5 I7E6 DIV 07 07 F6 F2 11 F7 00 F7 07 TMARL I MI lDAIM ADCZ TAX LOAIM STAZ BEQ DEY LOAIM ADCZ TAX TNX #S07 #107 DESTM lTEMP SAVE A |MASK FOR LS3 BITS IREVERSE *EM |SAVE *EM |RECOVER TEMP I SHIFT TO NEXT FIELD f SET FOR 2ND INTERP PAGE t TEST FOR QUADRANT I MI 1ST #S11 DEST »NO, (A) OEST MOVE | SET DEST ■ #S07 ARILOG A JCHANGE PAGES fOFFSET FOR 2ND SRC IXFER TO INDEX f SET HIGH ADDRESS XFRTBL fGET LO ADOR I SET LO ADDRESS LDXZ LOYZX SRC REGS |GET SOURCE INDEX |GCT SOURCE DATA IN Y LDXZ LDAZX STAZ DEST REGS DSTDA |GET DEST INDEX >SAVE DESTINATION DATA LDAIM PHA TXA RTI #S44 ISET 6 5 0 2 STATUS !DEST I N D , !N A 1 X IGO INTERPRET PAGE 7 80 80 SIMULATOR (C) 01fl0 1978 BY DANN MCCREARY •$0100 ORG 0 100 0101 0 1 03 0 1 05 0 106 IN 4A F0 06 90 33 A8 4C 7A03 0 109 010C 010E 0 110 0 1 13 0 115 20 A2 A0 20 A2 4C 0118 011B 011E 0 1 20 0 123 0 125 20 20 A2 20 A2 00 L3RA BtQ BCC TAY JMP CAlL65 ISET Y*01 >CALl 6 5 0 2 SUBROUTINE 6 3 03 XCHG 04 02 6 503 04 7003 JSR lD XI M LDYIM JSR lD XI M JMP RP/SCR fOE) (H L) RP/RP fDF ) SCR/RP |MOVE HL TO SCRATCH IPOINT TO OE lANO HL |MOVE OE TO HL |POINT TO OE fMOVE SCRATCH TO DE 6303 XTHL 7603 02 A003 19 56 JSR JSR lD XI M J3R lD X IM 0NE RP/8CR 3P/PNT (HL) MgM/RP (3CR) RP/MEM |MOVE HL TO SCRATCH I MAKE SP POINTER lPOINT TO HL |MOVE STACK TOP TO HL |POINT TO SCRATCH |MOVE SCRATCH TO STACK » 1 /0 * 0127 0128 012A 012C 4A 00 03 86 E3 60 I/O 0 120 012F 0131 0132 0134 0 136 0138 013B 0 130 013E 013F 0 142 0 145 0 146 0 1 47 0 1 49 014A 014C 014E 014F 0150 0152 0 1 54 0 1 56 0 158 015A 015C A2 90 4A F0 80 C6 20 A5 0A AA BO 90 E8 80 00 C8 A5 91 88 4A 90 A5 91 B0 01 85 60 10L 02 CF E4 50 F5 OUTPUT A803 INPUT FE FC03 IOPLP FB00 *I F8 FC 06 E8 FC 04 FC E5 IOIN IOEX IDETERMJNE TYPE XCHG INPUT ETC t ENTRY*< lSRA 0NE STX2 RTS lD X IM 0CC lSRA BEG 8CS DECZ JSR lQA2 ASLA TAX lOAX STAY INX DEY §NE !NY lOAZ STAIV OEY lSRA 0CC lOAZ STAIY BCS lOAIY STAZ RTS IHHICH INST? lB l lNTE (HL) IN XTHL JU*PUN FLAG I MM SCR IS E T /C lE A R INTE lPOINT TO Ml I I S I T INPUT? I N O , I S I T XTHL? I YES I I S I T JUMP? INO* FLAG AN OUTPUT lGET PORT * !DOUBLE INDEX XOTBl PNT-1 lGET I / O ADDRESS ISTORE IN POINTER I8UHP INDEX !OECREMENT COUNTER I O P lP FLAG PNT IOIN A PNT IOEX PNT A lPOIN T TO DATA D ! R 9 REG* lGET INPUT OR OUTPUT DATA lSET DATA D IR * REGISTER |P O IN T TO PORT I INPUT? !YES* GO DO I T fNO* OUTPUT A II N P U T FROH PORT |T0 A PAGE 8 8080 SIMULATOR (C) t978 BY DANN MCCREARY ARILOG IMMEDIATE E N T R Y * * * * * * * 015D 0 160 0161 20 AB03 ARIM 18 4C C017 J3R ClC JMP *******P U S H 0 164 0 1 65 0167 0169 016B 4A B0 C9 F0 4C 016E 016F 0170 0172 0173 0174 0 175 0178 017B 0l7C 017D 017F 0181 0 183 0184 0185 0187 0A AA 00 CA 8A 48 20 20 68 AA A0 B5 91 CA 88 F0 60 PUSH 07 03 27 1102 SKP 01 PUSHT 9703 7603 01 E6 FC RP/MEM RPLP F8 RT8 IMM IGET IMMEDIATE BYTE IMARL IGO 00 ARITH ROUTINE ENTRY****** L3RA BCS CMPJM BEO JMP ASl.A TAX BNE OEX TXA PHA JSR JSR PLA TAX LDYIM LOAZX STAIY OEX OEY BEQ RTS SKP «S03 CALLUN UNOEF PUSHT I I S THIS A PUSH? IYES» GO PUSH JNO, 13 THIS A CALL? ! Y E 3 f GO CALL IN0» UNDEFINED } MAKE AN INDEX I I S I T PUSH P3W? INO, KEEP INOEX I Y E 8 , ADJUST INDEX I TEMP SAVE DECSP 8P/PNT IDECREMENT STACK POINTER I I T BECOMES POINTER IRECOVER TEMP SAVE «S01 REGS*1 PNT ICLEAR INOEX IGET NEXT RP DATA ISTORE IN MEMORY RPLP JUMP E N T R Y * * * * * * 0188 JMP B8 I INDICATE A JUMP CLV CALL E N T R Y * * * * * * * 0 189 018C 018E 20 0 002 CALL F0 04 4C 8 0 03 JSR 9EQ JMP 0191 0 192 0 195 0 197 019A 019C B8 20 A2 20 50 20 CLV JSR LOXIM JSR BVC JSR PC/PNT (SCR) M|M/Rp JM DBLINC 019F • lA l A2 0A 20 7301 LOXIM JSR (PC) PUSHT lSAVE RETURN lON STACK 0lA4 01A6 A2 0A JH 4C 7 003 LOXIM JMP (PC) SCR/RP fPOINT TO PC ! G I V e I T NEN ADDRESS JOMPUN 5 003 C A L L U N 19 s A003 08 8 0 03 SVR COND!T CALLUN DBlINC ITEST CONDITION )MET I NOT MET f INDICATE A JUMP fGET NEXT 2 BYTES I I N T O SCRATCH f JUMP )BUMP PC PAGE 9 8080 SIMULATOR CC) 1 97 8 BV DAMN MCCREARY *******RETURN E N T R Y ******* 0!A9 01AC 01 AE 01B0 20 D0 A2 00 0082 RETURN 09 RETUN 0A 14 J8R 0NE lD X IM BNE *******R ESET e iB 2 0 104 0 106 0 1 08 010A 018C A5 29 85 A9 85 90 FE 38 FE 00 FF El PST CONOIT RTS CPC) POPIT ) TEST CONDITION * NOT MET |POP RETURN OFF * STACK INTO PC ENTRY***** LOAZ ANOIM STAZ LDAIM STAZ 8CC INST *S 3 8 SCR RSTHI SCR*t SVR *CONVERT INSTRUCTION lTO RESET VECTOR |STORE I T IN SCRATCH |HIGH RESET VECTOR * * * * * * * POP fcNTRY 010E 0t BF 01C1 01C2 01C3 0tC5 01C6 01C7 01C8 01CB 01CC 01CD 4A 90 OA AA 00 CA 8A 48 20 68 AA 20 01D0 0103 0105 20 0301 A2 08 4C 8503 INCSP ISP 01D8 0lDA 01DC 01DO 01OF 01E1 01E3 01E5 01E7 A2 A0 0A F0 C9 F0 10 A0 4C OTM POP 17 01 POPIT 7603 A003 02 08 08 04 2E C9 0A 65£3 SPHL LSRA 8CC ASLA TAX 9NE OEX TXA PHA J3R PLA TAX JSR OTH POPIT *POP? *NO *POP PSW? *NO, KEEP INDEX *YES, ADJUST INDEX *TEMP 3AVE INDEX SP/PNT *SP I S POINTER *RECOVER TEMP MEM/RP *PULL OUT STACK DATA J3R LOXJM JMP ISP (SP) INC *BUMP SP LOXIM lOYIM ASLA BEQ CMPIM 8EQ BPL LOYIM JMP CHL) CSP) *POINT TO HL (ASSUME SPHL * I S I T SPHLT *YES, GO DO I T *NO# *HAT I S I T T *UNDEFINED *RETURN >PCHL 3PHL #$04 UNOEF RETUN (PC) RP/RP ►TABLE OF PSW M A S K S * * * * * * * 01EA 01EB 01EC 01ED 80 04 01 40 MSKTBt FOUR OC DC DC OC SMASK PMASK CMASK ZMASK *SIGN B I T MASK *PARITY B I T MASK fCARRV B IT MASK fZERO B IT MASK •PAGE 1 RAM MEMORY A0DRES3E3 * S 0 t F 0 TO #S01FP MUST BE RESERVED FOR STACK* PAGE 10 8 0 0 0 SIMULATOR 02 00 (C) 1978 ORG *******TE 3T 4A C 0N0 IT AA 8D EA01 25 E4 LSRA TAX LOAX ANDZ 0207 0 2 09 020C B0 03 EA01 60 RTN RCS EOPX RTS *******N O P 020D 020F 0211 A5 FE NO# F0 FB 4C 221C UNOEF #$0200 SELECTED PSW B I T * * * * * * * 0 2 00 0201 0202 0 205 50 4A 0A D0 02 A9 00 40 8A 4A B0 12 021F 0 2 20 0221 0 223 60 DAO A0 A2 02 20 8703 OAOLXI NSP IMAKE INDEX TO MASK. TABLE MSKTBL PSW | GET CONDITION FLAG MASK l I S CONDITION SET* RTN MSKT8L ILEAVE Z FLAG SET IOR REVERSE I T EN TR Y******* l.OAZ 8EQ JMP *******D A D /L X I 0214 0 2 15 0 216 0 2 18 021A 0 218 021C 0 2 10 BY DANN MCCREARY L3RA ASLA 8NE LOAIM PHA TXA L3RA BCS PLA TAY LOXIM J3R INST RTN MNITOR ICHECK INSTRUCTION I I F NOPt JUST RETURN l * K I M * GO TO SYSTEM MONITOR ENTRY***< IDROP LS0 NSP CSP) LXI I USE SPT lY E S , POINT TO I T ISAVE POINTER IGET DESTINATION INDEX fDAOt I NOf GO DO LXI IYES# (HL> iN c o e c RECOVER POINTER I SET HL AS DESTINATION | GO ADD RP 0 HL SET 8080 CARRY PER 6 5 02 C A R R Y * * * * * * * 0 226 0 227 0 228 022A 022C 022D 022F 0 2 30 A0 2A 45 F5 46 E4 4A 26 E4 90 o5 60 0231 0 234 0235 0 2 36 0239 20 5 003 LX! 60 AA 20 A003 4C 8 0 03 CARRY TAY ROLA EORZ LSRZ LSRA ROLZ TYA RTS JSR PLA TAX JSR JMP PLAO P0M ISAVE RESULT IBRING IN CARRY lCM0 TO BORROW I F SUBTRACT fRESTORE CARRY(BORROW) PSW IRECOVER R E S U L T PC/PNT MEM/RP DBLINC lPC INTO PNT fRECOVER POINTER fUSE TO INDEX DESTINATION RR IMOVE IMMEDIATE DATA TO RP fBUMP PROGRAM COUNTER PAGE 11 8 0 8 0 SIMULATOR (C) t978 *******LO A D BY DANN MCCREARY ft STORE EMTRY 023C 023F 2C EB01 LD3TR F0 08 B IT 8E3 FOUR OIRECT lINOIRECTt I NO 0241 0 242 4A 90 23 LSRA BCC LDAX fSTAX? I NO 0244 0246 0248 A5 E5 81 E4 60 STAX LOAZ STAJX RTS 0249 024A 024D 0250 0252 0255 0257 025A 40 20 20 A2 20 A2 20 68 OIRECT PHA JSR JSR LDXIM JSR LDXIM JSR PLA 0258 02SC 4A R0 0E LSRA QCS 025E 025F 0260 0262 CU LOAD AA F0 03 4C A003 ASLA TAX 8EQ JMP LOAD MEM/RP lLOAD A DIRECT? | N 0 , LOAD HL DIRECT 0265 A2 17 LDAD LDXIM (PNT) |POINT TO POINTER 0267 0269 026B A1 E5 85 E5 60 LDAX LOAIX STAZ RTS REGS A tLOAD A 026C 0 260 026E 0270 0A AA F0 03 4C 7D0t STORE A3LA TAX BEO JMP 3TAD RP/MEM f STORE A OIRECT? | N 0 , STORE HL OIRECT 0 273 0 275 A2 10 D0 CO ST AO LOXIM 8NE (PNT>M STAX IPOINT TO POINTER 5 0 03 8003 19 A003 17 7003 A REGSM PC/PNT DBLINC (SCR) MEM/RP (PNT) SCR/RP fYE 3 ,8 T0 R E A ITEMP SAVE |PC TO POINTER t RECOVER TEMP STORE !LOAD? fNOf STORE f MAKE INDEX ) MAKE INDEX PACE 12 8 0 8 0 SIMULATOR (C) 1978 BY DANN MCCREARY *******IN X /D C X LDYIM ENTRY******* 0277 A0 0C 0279 027A 4A 90 02 l3RA BCC DRP I YES 027C A0 0F LDYIM (INCIT> |N 0, 027E 027F 0A 00 02 ASLA BNE NOR IDROP LSB |FOR SP? 0281 A9 08 LDAIM (SP) I YES# POINT TO SP 0283 0284 AA NOR 4C 8703 TAX JMP INCDFC INXDCX ORP ******«DCR 0287 0288 38 C6 F5 OCR 028A A0 01 028C 028F 20 BO03 BTH 4C 3803 I NR 20 AB03 MV I 4C 0217 98 CA 00 02 029C 81 E7 029E 02A0 95 E6 60 °3 MOVIT MV I T 1 NMEM IUSE AS INDEX ENTRY******* I SET FOR DECREMENT FLAG ENTRY******* 3INC ISET FOR INCREMENT J3R JMP AOOR STATUS IGO ADD ISET STATUS# NOT CARRY IMMEDIATE E N T R Y * * * * * * * IMM MOVE J3R JMP *******M f)V E 0298 0299 029A SET FOR INCR LDYIM *******M fW E 0292 0295 ISET FOR DECREMENT . SEC DECZ *******Is jR (DECIT) I GFT IMMEDIATE BYTE I MOVE I T TO DESTINATION EN TRY******* TYA DEX BNE NMEM I GET SOURCE DATA ! I S DEST MEMORY? I NO 3TAIX HL I YES# STORE IN MEMORY STAZX RTS RE6S*1 I STORE IN DIST REGISTER PAGE 13 8 0 8 0 SIMULATOR (C ) 1978 BY OANN MCCREARY **ARITHMETIC ROUTINES** *******A D C ENTRY******* 02A1 02A2 B8 50 08 ADC CLV 8VC *******C M P 02A4 02A6 CMP A2 19 00 01 SBB B8 C6 F5 38 SUB 4C 3203 ADD ICHG DEST TO 8CR | S 0 ONLY PS* IS AFFECTED ENTRY******* IFLAG */BORRO* EN TRY******* OECZ SEC *******AD D 02AC (SCR) 8U8 CLV *******S U B 02A9 02AB EN TRY******* lD XI M BNE *******SBB 02A8 *FLAG W/CARRY ADD FLAG lFLAG « FF FOR SUBTRACT EN TRY******* JMP AD/CRY * * * L O G IC A L OPERATIONS** **★ ***•*ORA E N T R Y * * * * * * * 02AF 02B0 0282 ORA 98 05 E5 90 03 TYA ORAZ BCC *******XR A 02B4 02B5 02B7 02B9 XRA 98 45 E5 A0 00 90 0B SOM 02B6 02BC 02BD 02BF 02C0 02C2 02C3 02C4 98 48 05 E5 0A 29 10 A8 68 25 E5 02C6 02CB 02CA 02CD 02CF 0201 02D3 02D5 84 85 20 A9 25 05 85 60 ANA o5 FF ALL E5 3803 EE E4 CY*AC FF E4 STPS* I GET SOURCE DATA * LOGICAL OR | SET FOR A CLEAR AUX CRY ENTRY******* TYA EORZ LDYIM BCC ******«AN A A SOM A «*00 ALL |GET SOURCE DATA ILOGICAL EXCLUSIVE OR 100 WON«T SET ANY FLAGS IGO SAVE RESULT EN TRY******* TYA PHA ORAZ ASLA ANDIM TAY P lA ANOZ 3TYZ STAZ J3R LDAIM ANDZ ORAZ STAZ RTS A IGET SOURCE DATA ISAVE I T *LOGICAL OR OF B I T ITHREE BECOMES AUX CARRY «$10 A *GET SOURCE DATA *LOGICAL AND 3CR*1 A STATUS «SEE R8W SCR*1 PS* *SAVE FLAG SETTING DATA ILOGICAL RESULT INTO A ISET STATUS ISELECT STATUS B I T 8 TO CLEAR *CLEAR SELECTED BITS *SET SELECTED BITS *SAVE NEW PSW PAGE 14 8 0 8 0 SIMULATOR (C) 1078 **#***#ROTATE# 0 206 0 208 0 2 09 A4 ES 4A 00 0A 0 208 02DD 02DF 02E1 02E3 A5 49 90 09 70 E4 01 02 01 EE STPS 02E5 02E7 02E8 02EA 02EB 02ED 02EF B0 4A 00 98 49 83 60 13 ROCOMP 02F0 02Fi 02F3 02F5 02F6 02F7 02F8 90 B0 02 AS E4 4A 96 6A 70 00 ROT 02FA 02FB 02FC 02FE 0 300 0 3 02 0 303 0334 030b 0 3 06 0307 0 309 4A F0 98 B0 A5 6A 6A 0A 90 2A 83 4C LEFT 030C 0 3 00 030E 030F 0 3 10 0 3 12 0 3 14 0 3 18 0318 031A 031C 031E 18 08 98 EA 85 29 69 03 29 F0 A9 A0 ROTATE 06 FF E5 RRC 0F 04 E4 RLC ES JCRY 2 6 02 OAA •* F6 0F 06 £4 10 02 06 NOSIX BV DANN MCCREARY ETC* E N T R Y * * * * * * * LDY2 LSRA 8NE A LDAZ FORI * BCC ORAIM PV8 P3W «101 3TPS «S01 STP3W | YES# CHANGE CARRY ICMC 8CS LSRA BNE TYA PORIM STAZ RTS LEFT ILEFT OR RIGHT? fCMA? *NO# ROTATE >YES# COMMPLEMFNT A TYA BCS LOAZ LSRA TYA RORA BVS L3RA REO TYA 8CS LDAZ RORA RORA ASLA TYA ROLA STAZ JMP CLC PHP TYA MOP STAZ ANDIM AOC|M ORAZ ANDIM BEQ LDAIM TAY ROCOMP ROT #SFF A ) GET ACCUMULATOR » IS THIS CMC OR 8TC? f NO# I T I S A ROTATE .OR CMA >STC t DOESN* T SET STATUS | GET ACCUMULATOR RRC P3W |GET 8080 CARRY JCRY >GET ACCUMULATOR IROTATE RIGHT fGO STORE&3ET CARRY OAA RLC P3W A CARRY |DECIMAL I YES# GO >N0, GET JRLC? | NO# GET IMOVE I T ADJUST? 00 I T ACCUMULATOR 80 80 CARRY INTO MSNIB t MOVE I T INTO CARRY IGET ACCUMULATOR IMOVE I T LEFT f SAVE I T IGO SET STATUS >PRE3ERVE STATUS |GET SOURCE DATA 0E3T0A #S0P • *06 PSM «•19 NOSIX «006 *PREP FOR ADD *LOOK AT L S N I8 I I F » * 0 A WILL CAUSE AUX CRY *OR I F AC I S ALREADY SET *EITHER SET? *NO, DON’ T ADJUST LSNIB lYES# ADJUST I T PAGE 15 8 0 8 0 SIMULATOR (C) l978 031F 0321 0 323 65 F6 B0 08 69 60 AOCZ BC3 AOCIM 0 325 0326 0 328 0329 032B 032C 032E 032F 0331 0332 0335 2A 05 4A 90 98 69 A8 A2 28 20 20 ROLA ORAZ LSRA BCC TYA ADCIM TAV lD X IM PLP JSR J3R E4 04 3XTY SP 80 OA 8003 AO/CRY 2602 BY OANN MCCREARY DfSTDA 3XTY «360 PS* DA «S5F «300 fGET SOURCE 113 MSNIB NOW >■ A0T I I F SO* CARRY I S SET |GET CARRY lOR WITH 8080 CARRY I I S EITHER SETT | NO# DON'T ADJUST MSNIB lYES* ADJUST MSN!B I (5 F ♦ CARRY • 6 0 ) !DESTINATION I S A |RESTQRE STATUS AOOR CARRY * * * * * * * S T A T l . l S ROUTlNE** *SETS ZERO# SIGN AND I"AR ITY , LEAVES CARRY AND AC* 0338 0 339 033B 033C 033E 0340 0341 A8 26 0A 85 A5 6A 09 0 343 0344 0 345 AA 98 F0 13 0347 0349 034A 034C 034E F6 4A F0 90 80 0350 0352 0 353 0355 0357 0 359 46 8A 29 B0 29 AA 035A 035C 86 E4 60 STATUS E4 F5 E4 46 F5 02 FH F7 SGN TAY ROLZ ASLA STAZ LDAZ RORA ORAIM TAX TYA BEG F L IP PAR ALL TNCZ LSRA BEQ BCC BCS REC L3RZ TXA ANDIM BCS ANDIM TAX F5 BP 02 FB DONE STXZ RTS FLAG PSP ISAVE RESULT lCLEAR P3W SIGN BIT IPUT NEW SIGN IN CARRY lCLEAR LSB OF FLAG IPUT NEW SIGN IN P3N «346 |PRESET Z*P 8 PRESET DONE |3AVE IN X I RECOVER WORD I I F ZERO* ALL DONE PS* FLAG ALL PAR F L IP FLA6 «3BF REC «SPB PS* I F L I P FLAG |TEST EACH BIT INO MORE BITS ITEST FLAG !RECOVER P3w lCLEAR Z |PAR ITY EVENT | N 0 * CLEAR P |BACK TO X fSTORE AS PSW PAGE 16 8 0 8 0 SI*ULATOR CC) 19 78 8Y DANN MCCREARY *******S U B R O U TIN E S ******* ***MOVE REGISTER P A I R S * * * 0 350 A2 0A PC/PNT LDXIM (PC) !SOURCE I S PC 03SF 0361 A0 17 00 02 RP/PNT lOYIM 9NE (PNT) RP/RP !DESTINATION IS PNT ' I GO TRANSFER 0 3 63 A0 19 RP/3CR LDYIM (SCR) !DESTINATION I S SCR 0 365 0367 036A 036C 036F 95 99 95 99 60 LOAZX STAY LOAZX STAY RTS REGS REGS REG3*l REGS*1 !GET LOW ORDER SOURCE ! STORE IN LOW DESTINATION !GET HIGM SOURCE ! STORE IN HI DFSTINATION 0 370 0371 0372 0 374 8A A6 A2 19 DO EF SCR/RP 0 376 0 376 A2 00 00 E5 SP/PNT E5 RP/RP E500 E6 E600 !RP I S DESTINATION TXA TAV LDXIM BNF (SCR) RP/RP ! SCR I S SOURCE LOXIM BNE (SP) RP/PNT !SP I S SOURCE !UNCONDITIONAL BRANCH *CALL 6502 S U B R O U T I N E * * * * * * * * * * ( C A L L SUBROUTINE ADORESS « * ! > * * * 037A 037C 0370 037E 91 EF 46 80 10 FA CALl65 LDAIY PHA OEY 8PL * * * * * * * I NC » OEC , PC !GET ADDRESS CALL65 ! POINT TO L0 CALL !OONE? OR ADO REGISTER P A I R S * * * * * * * 0380 0 383 20 8303 DBLINC A2 0A INCPC JSR LDXIM INCRC (PC) ! INC PC TwICE ! INC PC 0385 A0 0E LOYIM (IN C IT ) !POINT 0 387 0 388 038A 0 380 038F 0 390 0391 0 3 92 0 3 94 0396 10 B5 79 95 C8 E0 90 29 00 60 REGS REGS REGS !GET ! ADD !8AVE ! BUMP INDEXES •0397 20 9A03 0EC8P 039A A2 00 039C 039E A0 0C 00 E7 INC INCOEC E5 INOE E500 E5 «J CLC LOAZX AOCY STAZX INV INX TYA ANO!M BNE RTS TO INC DATA #001 INOE !CHECK INDEX ! L * S T PASSt fNO !YES JSR DSP !DEC SP TWICE DSP LOXIM (SP) !DEC SP OEC LOYIM BNE (DECIT> INCOEC ! POINT TO DEe DATA !G0 00 I T 01 F2 PAGE i 7 8080 SIMULATOR (C) 1978 BY DANN MCCREARY *******S U B R O U TIN E S ******* *MOVE MEMORY TO REG PAIR* 03A0 A0 01 MfcM-RP LDYIM «S01 fMOVE DATA IN MEMORY 03A2 03A4 03A6 03A7 03A8 03AA B1 FC 95 E6 CA 88 F0 F8 80 MRLP lO A I Y STAZX OEX OEY BEO RTS PNT REGS*1 IGET NEXT BYTE ISTORE IN DESTINATION ) BUMP INDICES *******FETCH 03AB 03AD 03AF A2 00 A1 EF 85 FE 03B1 03B3 03B5 03B8 03BA 03BC A9 85 20 A2 A0 60 J MM 19 F8 8 303 00 02 ADDR 98 45 A8 29 85 2A 70 03C8 45 E4 03CA 03CB 48 4A 03CC 03CE 03D0 03D2 A5 29 66 29 0304 0 306 0 3 06 0306 • 03DC 0 300 03DE 03E0 F5 0F FE 02 IMMEDIATE B Y T E * * * * * * * tDXIM LDAIX STAZ #$00 PCL SCR lGET BYTE POINTED AT | BY PROGRAM COUNTER | SAVE I T IN SCR lDAIM STAZ JSR LDXIM I OYI M RTS (SCR) 3RC INCPC # $00 INPG2 | MAKE SCR THE SOURCE INQEX *******A DD 03BD 03BE 03C0 03 Ci 03C3 03Cb 03CO MRLP | POINT TO INTERP PAGE 2 CONTENTS OF Y & O E S T O A * * * * * * * TYA EORZ TAY ANOIM STAZ ROLA BV8 EORZ W/OC*Y ) BUMP PC FLAG #f0F SCR |GET SOURCE OAT A ICHANGE I F SUBTRACT ISAVE LSNIB W/OCRY lGET CARRY l N A |AOD/SUB W/CARRYT PSW |YES, CHG PER 80 80 CARRY ISAVE FOR L*TER |8ET CARRY PHA LSRA LOAZ ANOIM AOCZ ANOIM OESTDA #S0F SCR # 810 lGET ACCUH DATA ILOOK AT LSNlB IADD TO SOURCE LSNIB }WA3 THERE AN ACT 85 FF A9 EF 20 CF02 STAZ LDAIM JSR 3CR*t #SEF CYSAC lSAVE AC |CLEAR AC 68 4A 98 65 F6 4C 9 902 PLA LSRA TYA AOCZ JMF F6 0P FE M fGET CARRY BACK OESTOA MVIT1 lGET SOURCE DATA I A00 TO ACCUMULATOR IGO PUT RESULT IN DESTINATION PAGE l S 8080 SIMULATOR CC) 19 78 BY DANN MCCREARY * * * * * * * E N T R Y ADDRESS TA8LE POR TRANSFER * * * * * * * T O INSTRUCTION INTERPRETATION** 03E3 03E4 03E5 03E6 03E7 03E8 03E9 03EA 03EB 98 DS 92 87 8A 77 3C 14 00 OC DC OC OC OC DC OC DC DC MOVIT ROTATE MV I OCR INR INXDCX LOSTR DADLXI NOP IENT RIE3 ON 2ND INTRP, 03EC 03ED 03EE 03EF 03F0 03F1 03F2 03F3 B2 5D 64 89 27 88 BE A9 DC PC OC DC DC DC DC DC RST ARTM PUSH CALL I/O JMP POP RETURN IENTRIES ON 13T IN TR P, PAGE 03F4 03F8 03F6 03F7 03F8 03F9 03FA 03FB A4 AF B4 BB A8 A9 Ai AC DC OC DC OC DC OC OC DC CMP ORA XRA ANA SB8 SUB ADC ADD #ENTRIES ON 2ND INTRP, PAGE XFRT8L PAGE - • * * * * * * * I N P U T / O U T P U T PORT ADDRESS***’ *******D E F IN IT IO N TA B LE******* *ENTRIES MUST RE IN NORMAL ORDER* I E * MOST 3IGNIP IGAN T ADDRESS BYTE F I R S T * 03FC 03FE 1700 1740 IOTBL DC 2, OC 2, #S0017 0*4017 #8080 PORT 0 J8 080 PORT 1 * * K I M * PORT A * K I M * PORT SA PAGE 19 8 0 0 0 3IMIJLAT0R (C) t978 BY DANN MCCREARY * * * 8 0 8 0 DEMONSTRATION PROGRAM *******TJM E -O F-O A Y CLOCK***** 0 000 ORG #9 00 0 0 0 000 0 003 0 004 0 005 31 7400 nEMO F3 00 C3 0900 L XI SP 01 NOP JMP #$00 74 0 0 08 F1 POP PSw fPOP UNUSED RETURN OFF STACK 0 0 09 000A 0008 000C 0000 000E 0 010 0013 B7 TIME 79 3C 27 4F FE 60 FA 2800 0E 00 ORA MOV INP OAA *OV CPI JM MV I A A,C A !CLEAR CARRY IUPDATE SECONDS 0 015 0016 0017 0 018 0 019 001B 001E 78 3C 27 5F FE 60 FA 2 800 lE 00 * ov I NR OAA MOV CPI JN MVI 0 020 0021 0 0 22 0 023 0 024 0 026 0 0 29 7A 3C 27 57 FE 13 FA 2800 16 01 “ OV I NR OAA MOV CPI JM MVT 0,A #913 SHOM D ,#90t 0028 002E 002F 0030 0031 0 0 32 21 F 800 SHOM 72 28 73 28 71 *0 06 88 NXTKY LXI MOV OCX MOV Dcx MOV H,POINTH | * K I M * MfO JMOVE TIME TO D I S P , H M,E H M*C MVI B,#988 0 0 33 TMTIME fSET STACK POINTER !DISABLE INTERRUPTS I NO OPERATION TIM I C,A #960 SHO* C,#900 A,E A E,A #960 8H0N E,#900 # ,D A IMINUTE UPDATE? f NOT NOw !Y ES , CLEAR SECONDS !UPDATE MINUTES I HOUR UPDATE? I NOT NON ! YES, CLEAR MINUTES !UPDATE HOURS ! USE #924 FOR 24 HOUR CLOCK IUSE # 9 00 FOR 24 HOUR CLOCK BUFFER lSET TIME DELAY VALUE ALTERNATE FOR INTERRUPT T I M E B A 3 E * * * * * * * *0033 06 37 NXTKV MVI B,#937 lOEBOUNCE INTERRUPT* PAGE 20 8 0 8 0 0 035 0038 003A 0 030 003E 0041 0 042 CB FE FA 05 C2 FB C3 SIMULATOR 6500 WAIT 0A 4 500 3500 0900 (C) 19 78 BY DANN MCCREARY C65 CPI JM OCR JNZ EI JMP D3KBD*l «S0A SET B WAIT TIME | 6 5 0 2 DISPLAV&KEYBOARD SUB |NUMERIC KEY PRESSED? I YES* GO SET TIME | N 0 , COUNT DOWN DELAY ) KEEP WAITING >ENABLE INTERRUPTS IGO SET TIME * * * * * * * A L T E R N A T E FOR INTERRUPT T I M E B A S E * * * * * * * *0042 JMP C3 3500 WAIT |KEEP WAITING FOR INTERRUPT* ********************************************** 0045 0046 0047 0 048 0 049 004A 004B 47 FB 29 29 29 29 EB 004C 0 040 004E 004F 0 050 MOV XCHG n AO OAO 0A0 0A0 *C*G B,A 79 07 07 07 07 MOV RLC RLC RLC RLC At C 0051 0 052 0 054 0 0 55 4F E6 0F B3 5F MOV ANI ORA MOV C,A «S0F E E,A 0 0 56 0 057 0 0 59 005A 79 E6 F0 B0 4F MOV ANI ORA MOV A#C MF0 9 C,A 005B 005E 0 0 60 0063 CB FE FA C3 C6S CPI JM JMP DSKBD*1 *S15 DBNC SHOW SET 6 500 DBNC 15 5B00 2B00 M M H H |SAVE INPUT IN B ySMIFT THE TIME ONE D I G I T LEFT IBY ADDING HL TO ITSELF y AND ROTATING THE SECONDS LEFT I INSERT NEW D I G I T IWAIT FOR KEY RELEASE IRELEA3ED? PNOT YET IYES* GO SHOW TIME * 6 5 0 2 SUBROUTINE CALLED FROM 8 0 8 0 P R O G R A M * * * * * * * *(C A LL MUST BE TO SUBROUTINE ADDRESS * U * * * * * * * 0066 0 069 006C 006E 20 l F l F DSKBO 20 6 A l F 85 E5 60 JSR JSR STAZ RTS SCAN03 GETKEY A f * K I M * DISPLAY BUFFER JREAD * K I M * KEYPAD )RESULT TO 6 0 8 0 ACCUMULATOR |RETURN TO SIMULATOR 80 60 STACK # S 0 0 6 F * # S 0 0 7 4 3030 5DIULAT0R ADDENDA i. SFSCiAL ..i:;i;-:uM :oN?ic-URATioM FROCSDURE This procedure does not require tIie control configuration hardware cn KIM port PB or the use of the N>II interrupt (KIM's ST k e y ) . I t is LLaited to r^Tini ng 3Q3C programs (i.e., no single-step or other features)« 1. Load the Simulator programs from tape as specified in steps 1 - lS of the Tape Loading Instructions of the User Manual. 2. Be absolutely certain to put #$FF in location #S00F1 ! 3*Uhange #5173F from #36C to #5D0. 4*Change #$1790 from #$SA to #3EF. 5*Examine location #$1730 - it contains #$A2.* 6»Fush the GO key. 7.The demonstration 3080 Time Of Day Clock program is nom running. You shcuJLd see a 1HZ count begin in the display. id in rarid 3. The clock may be set by entering the time from the keyp^ seauence, less than 1 second between digits. The time digits will shift in from right to left. If you make a mistake, just begun agaxn and the new time will be entered. 9*7Then restarting the program or another 3c30 program, b e s u r e to set nrogram she 3C3C program counter to zerc, or to whatever ycur ^N3C oCi starting address nay be. 2. TELETYPE NOTES The following routines nay be cad_led froa your 30S0 program to communicate with your teletype via KIM teletype routines. They may be located anywhere in memory. Ca3_l them from your 3080 program with the special '*CSp'* opccde in the format, CB XXXX, where XXXX is the address of GET30-1 or 0UT80-1, least signifigant byte first. Read a character from the teletypes 2Q 5A.TE GST30 JS2 GETCH STAZ A 85 E5 RTS 60 Write a character to the teletypes A5 E5 20 AClE 60 0UT30 LDAZ A JSR OUTCS RTS 5. ADDITICNAL RELOCATION REQUIREMENTS 1. Don*t change the third b y t e o f three byte references to page zero. (i.e., Addresses QT42*. 0367* 036C, 0 3 8 4 ) 2. Change references to DR*G2 (at 17B9 and. 03BA) from #$02 co the most signifigant byte of the page to which you. are moving page two data. 3. Don*t attempt to relocate the Simulator at an arbitrary address. To do so wculd require modifying the page select logic on page 6 of the Sinrulat9 r listings. For simplicity^sake keep the code in the same .■ position relative to the page boundary. If arbitrary relocation is a necessity, change XFRTBL to two byte entries, including the most signifigant byte of address with each entry. Change the logic on page 6 to extract both bytes from the table and push them onto the stack.