----------------------------------------------------
Anhang
IV
Beispiel
für Fließkomma-Arithmetik
----------------------------------------------------
0000
20
*= 4000
;BELIEBIGER STARTPUNKT
DDB6
30 FMOVE = $DDB6
DA60
40 FSUB
= $DA60
0482
50 FTEMP = $0482
DDA7
60 FSTOR = $DDA7
D8E6
70 FASC
= $D8E6
00F3
90 INBUFF= $00F3
D800
85 AFP
= $D800
00F2
90 CIX
= $00F2
0580
0100 LBUFF = $0580
0110 ;
0098
0120 CR = $9B
0009
0130 PUTREC= $09
0005
0140 GETREC= $05
E456
0150 CIOV = $E456
0342
0160 ICCOM = $0342
0344
0170 ICBAL = $0344
0348
0180 ICBLL = $0348
0190 ; VON CAROL SHAW
0200 ; DEMO-PROGRAMM ZUR FLIESSKOMMA-ARITHMETIK.
0210 ; ES WERDEN ZWEI ZAHLEN VOM BILDSCHIRM-
0211 ; EDITOR EINGELESEN UND IN FLIESSKOMMA-WERTE
0212 ; UMGEWANDELT, DANACH WIRD DIE ERSTE ZAHL
0220 ; VON DER ZWEITEN SUBTRAHIERT, SPEICHERT DAS
0221 ; ERGEBNIS IN FTEMP (DURCH DEN BENUTZER
0222 ; FESTGELEGTES RESISTER) UND ZEIGT ES AUF
0230 ; DEM BILDSCHIRM AN.
0240 ;
0250 START
4000
205340 0260 JSR GETNUM ;ERSTE
ZAHL VON E: IN F.K.
UMWANDELN
4003
20B6DD 0270 JSR FMOVE ;ZAHL
VON FR0 NACH FR1
BRINGEN
4006
205340 0280 JSR GETNUM ;ZWEITE
ZAHL VON E: IN F.K.
UMWANDELN - AUSLASSEN, WENN
NUR EIN ARGUMENT
4009
2060DA 0290 JSR FSUB
;FR0 <== FR0 - FR1
400C
900A 0300 BCC NOERR
;VERZWEIGEN, WENN KEIN FEHLER
0310 ;
0320 ; FEHLER -- MITTEILUNG
ANZEIGEN
0330 ;
400E
A981 0340 LDA #ERRMSG&255
4010
8D4403 0350 STA ICBAL
4013
A940 0360 LDA #ERRMSG/256
4015
4C3940 0370 JMP CONTIN
0380 NOERR
4018
A282 0390 LDX #FTEMP&255
;ERGENBIS IN FTEMP
SPEICHERN
401A
A004 0400 LDY #FTEMP/256
401C
20A7DD 0410 JSR FSTOR
0420 ;
0430 ; ZAHL IN ATASCII-STRING
0440 ; UMWANDELN. ENDE DES STRINGS
0450 ; SUCHEN UND NEGATIVE ZAHL
IN
0451 ; POSITIVE UMWANDELN UND
ZEILEN-
0452 ; VORSCHUB ANF‹GEN.
0453 ;
401F
20E6DB 0460 JSR FASC
;VON F.K. IN ASCII-
STRING NACH LBUFF
UMWANDELN
4022
A0FF 0470 LDY #$FF
0480 MLOOP
4024
C8 0490
INY
4025
B1F3 0500 LDA (INBUFF),Y
;NƒCHTES
BYTE LADEN (WIRD
DURCH INBUFF ANGE-
ZEIGT) POSITIV?
4027
10FB
0510 BPL MLOOP
;JA - FORTFAHREN
4029
297F 0520
AND #$7F
;NEIN. NEGATIV -
MSBIT AUSMASKIEREN
402B
91F3 0530 STA (INBUFF),Y
402D
CS 0540
INY
402E
A99B 0550 LDA #CR
;ZEILENVORSCHUB SPEICHERN
4030
91F3 0560 STA (INBUFF),Y
0570 ;
0580 ;ERGEBNIS ANZEIBEN
0590
;
4032
A5F3 0600 LDA INBUFF
;PUFFER-ADRESSE STEHT IN
INBUFF
4034
8D4403 0610 STA ICBAL
4037
A5F4 0620 LDA INBUFF+l
0630 CONTIN
4039
8D4503 0640 STA ICBAL+l
403C
A909 0650 LDA #PUTREC
;PUTREC-KOMMANDO
403E
8D4203 0660 STA ICCOM
4041
A928 0670 LDA #40
;PUFFER-LƒNGE = 40
4043
8D4B03 0680 STA ICBLL
4046
A900 0690 LDA #0
4048
8D4903 0700 STA ICBLL+l
404B
A200 0710 LDX #0
;IOCB NR.-0 (BILDSCHIRM-
EDITOR
404D
2056E4 0720 JSR CIOV
;CIO AUFRUFEN
4050
4C0040 0730 JMP START
;VON VORNE ANFANGEN
0740 ;
0750 ; GETNUM -- ASCII-STRING
VON E: LESEN
0755 ; UND ZU F.K. NACH FRO
UMWANDELN.
0760 ;
0770 GETNUM
4053
A905 0780 LDA #GETREC
;GET RECORD (ENDE MIT CR)
4055
8D4203 0790 STA ICCOM
4058
A980 0800 LDA #LBUFF&255
;BUFFER-ADRESSE = LBUFF
405A
8D4403 0810 STA ICBAL
405D
A905 0820 LDA #LBUFF/256
405F
8D4503 0830 STA ICBAL+l
4062
A929 0840 LDA #40
;PUFFER-LANGE = 40
4064
8D4803 0850 STA ICBLL
4067
A900 0860 LDA #0
4069
8D4903 0870 STA ICBLL+l
406C
A200 0880 LDX #0
;IOCB NR.-0(BILD-
SCHIRM-EDITOR)
406E
2056E4 0890 JSR CIOV
;CIO AUFRUFEN
4071
A980 0900 LDA #BUFF&255
;PUFFER-ADRESSE IM
ZEIGER (INBUFF)
SPEICHERN
4073
85F3 0910 STA INBUFF
4075
A905 0920 LDA #LBUFF/256
4077
85F4 0930 STA INBUFF+l
4079
A900 0940 LDA #0
;BUFFER-INDEX = 0
407B
85F2 0950 STA CIX
407D
4C00D8 0960 JMP AFP
;AUFRUFEN DER ASCII ZU
F.K. UND RüCKSPRUNG
4080
60 0970 INIT RTS
;EINSCHALT (POWER-UP)-
ROUTINE(KEINE AKTION)
4081
45 0980 ERRMSG .BYTE
ìERRORî,CR
;ZEIGT GESETZTES
CARRY-BIT BEI
R‹CKSPRUNG VON
F.K.-ROUTINE AN.
4082
52
4083
52
4084
F4
4085
52
4086
9B
0990 ;
1000 ; ROUTINEN-START
INFORMATION
1010 ;
4087
1020 *= $2E2
02E0
0040 1030 .WORD START
02E2
1040
.END
Routinen
der Fließomma-Arithmetik