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.