Skip to content

Commit 163dbf7

Browse files
committed
sync sources
1 parent baeaaa5 commit 163dbf7

File tree

3 files changed

+264
-201
lines changed

3 files changed

+264
-201
lines changed

basic80.asm

+74-57
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,9 @@ ERR_US EQU 0EH
387387
ERR_DD EQU 12H
388388
ERR_DZ EQU 14H
389389
ERR_TM EQU 18H
390-
ERR_CN EQU 20h
390+
ERR_ST EQU 1EH
391+
ERR_CN EQU 20H
392+
ERR_UF EQU 22H
391393

392394
PrintString EQU 0F818H
393395
ENDIF
@@ -675,27 +677,38 @@ MessageFound:
675677
ENDIF
676678
LD HL, szError
677679
PrintInLine:
678-
CALL PrintString
679-
LD HL, (CURRENT_LINE)
680-
LD A,H
681-
AND L
682-
INC A
683-
CALL NZ, PrintIN
680+
CALL PrintString
681+
LD HL, (CURRENT_LINE)
682+
LD A,H
683+
AND L
684+
INC A
685+
686+
CALL NZ, PrintIN
684687

685688
;
686689
; Main
687690
; Here's where a BASIC programmer in 1975 spent most of their time : typing at an "OK" prompt, one line at a time. A line of input would either be exec'd immediately (eg "PRINT 2+2"), or it would be a line of a program to be RUN later. Program lines would be prefixed with a line number. The code below looks for that line number, and jumps ahead to Exec if it's not there.
688691
;
689692

690693
Main:
691-
XOR A
692-
LD (ControlChar),A ; Включаем вывод на экран (не управляющий символ)
694+
IF MICRON
695+
LD HL, szOK ; szOK
696+
CALL PrintString
697+
ELSE
698+
XOR A
699+
LD (ControlChar),A ; Включаем вывод на экран (не управляющий символ)
700+
ENDIF
693701

694-
LD HL,0FFFFH ; Сбрасываем текущую выполняемую строку
695-
LD (CURRENT_LINE),HL
702+
LD HL,0FFFFH ; Сбрасываем текущую выполняемую строку
703+
LD (CURRENT_LINE),HL
696704

697-
LD HL,szOK ; Выводим приглашение
698-
CALL PrintString
705+
IF MICRON
706+
LD (2078h),HL
707+
ELSE
708+
LD HL,szOK ; Выводим приглашение
709+
CALL PrintString
710+
ENDIF
711+
699712

700713
GetNonBlankLine:
701714
L030E: EQU $+1
@@ -998,12 +1011,12 @@ ResetInput:
9981011
L047D: CALL NewLine
9991012
ENDIF ; SERVICE
10001013
InputLine:
1001-
LD HL,LINE_BUFFER
1014+
LD HL,LINE_BUFFER
10021015
LD B,01H
10031016

10041017
; Get a character and jump out of here if user has pressed 'Enter'.
10051018
InputNext:
1006-
CALL InputChar
1019+
CALL InputChar
10071020
;Deal with backspace.
10081021

10091022
L0488: CP 08H
@@ -1344,6 +1357,7 @@ NextChar_tail:
13441357

13451358
INCLUDE "stRestore.inc"
13461359

1360+
13471361
; TestBreakKey
13481362
; Apparently the Altair had a 'break' key, to break program execution.
13491363
; This little function tests to see if the terminal input device is ready,
@@ -1380,6 +1394,7 @@ EndOfProgram:
13801394
INC A
13811395

13821396
JP Z,L0609 ; Если да, то это прерывание в операторе INPUT
1397+
13831398
LD (OLD_LINE),HL ; Сохраняем номер строки останова
13841399
LD HL,(PROG_PTR_TEMP) ; Сохранаяем адрес останова из временной переменной
13851400
LD (OLD_TEXT),HL ; для последующего восстановления по CONT
@@ -1426,7 +1441,7 @@ FTestPositiveIntegerExpression:
14261441

14271442
;Likewise, if subscript is >32767 then fall into FC error, otherwise exit to FAsInteger.
14281443
FTestIntegerExpression:
1429-
LD A,(FACCUM+3)
1444+
LD A,(FACCUM+3)
14301445
CP 90H
14311446
JP C,FAsInteger
14321447
LD BC,9080H
@@ -1437,7 +1452,7 @@ FTestIntegerExpression:
14371452

14381453
; Invalid function call (FC) error..
14391454
FunctionCallError:
1440-
LD E,ERR_FC
1455+
LD E,ERR_FC
14411456
JP Error
14421457
14431458
;1.11 Jumping to Program Lines
@@ -1528,9 +1543,12 @@ NextLineNumChar:
15281543

15291544
IF BASICNEW
15301545
ELSE
1546+
IF MICRON
1547+
ELSE
15311548
; Похоже, это мертвый код
15321549
DEC HL
15331550
ENDIF
1551+
ENDIF
15341552

15351553
PrintLoop:
15361554
RST NextChar
@@ -1626,12 +1644,12 @@ PrintNullLoop:
16261644
;Calculate how many spaces are needed to get us to the next tab-break then jump to PrintSpaces to do it.
16271645

16281646
ToNextTabBreak:
1629-
LD A,(TERMINAL_X)
1647+
LD A,(TERMINAL_X)
16301648
CP 30H
16311649
CALL NC,NewLine
16321650
JP NC,ExitTab
16331651
CalcSpaceCount:
1634-
SUB 0EH
1652+
SUB 0EH
16351653
JP NC,CalcSpaceCount
16361654
CPL
16371655
JP PrintSpaces
@@ -1655,16 +1673,16 @@ Tab:
16551673
ADD A,E
16561674
JP NC,ExitTab
16571675
PrintSpaces:
1658-
INC A
1676+
INC A
16591677
Spc:
1660-
LD B,A
1678+
LD B,A
16611679
LD A, ' '
16621680
PrintSpaceLoop:
1663-
RST OutChar
1681+
RST OutChar
16641682
DEC B
16651683
JP NZ,PrintSpaceLoop
16661684
ExitTab:
1667-
POP HL
1685+
POP HL
16681686
RST NextChar
16691687
JP L0794
16701688

@@ -1685,13 +1703,13 @@ L0840: LD A, (INPUT_OR_READ)
16851703

16861704
CHK 0852h, "Сдвижка кода"
16871705
Input:
1688-
CP '"' ; 22H
1706+
CP '"'
16891707
LD A,00H
16901708
LD (ControlChar),A
16911709
JP NZ,NoPrompt
16921710
CALL GetStringConstant
16931711
RST SyntaxCheck
1694-
DB ';'
1712+
DB ';'
16951713
PUSH HL
16961714
CALL L0D96
16971715
POP HL
@@ -1752,7 +1770,7 @@ GotDataItem:
17521770
RST NextChar
17531771
LD D,A
17541772
LD B,A
1755-
CP '"' ; 22H
1773+
CP '"'
17561774
JP Z,L08B2
17571775
LD D,':'
17581776
LD B,','
@@ -1763,7 +1781,7 @@ L08B2: CALL L0D53
17631781
EX (SP),HL
17641782
PUSH DE
17651783
JP L072B
1766-
1784+
17671785
L08BE: RST NextChar
17681786
CALL FIn
17691787
EX (SP),HL
@@ -1858,7 +1876,7 @@ L0978:
18581876
CALL EvalTerm
18591877
LD (PROG_PTR_TEMP2),HL
18601878
ArithParse:
1861-
LD HL,(PROG_PTR_TEMP2)
1879+
LD HL,(PROG_PTR_TEMP2)
18621880
L0986: POP BC
18631881
LD A,B
18641882
CP 78H
@@ -1924,14 +1942,13 @@ L09D2: PUSH BC
19241942
RST PushNextWord
19251943
LD HL,(CUR_TOKEN_ADR)
19261944
JP L0978
1927-
1928-
;EvalTerm
19291945

1946+
;EvalTerm
19301947
;Evaluates a term in an expression. This can be a numeric constant, a variable, an inline function call taking a full expression as an argument, or a bracketed expression.
19311948
;Get first character of term, and if it's a digit (as indicated by the carry flag) then jump to FIn
19321949

19331950
EvalTerm:
1934-
XOR A
1951+
XOR A
19351952
L09E6: LD (VALTYP),A
19361953
RST NextChar
19371954
JP C,FIn
@@ -1945,9 +1962,9 @@ L09E6: LD (VALTYP),A
19451962
CP '.' ;2EH
19461963
JP Z,FIn
19471964
;If the character is a leading '-' then jump head to EvalMinusTerm
1948-
CP TK_MINUS ;0A5H
1949-
JP Z,EvalMinusTerm ; L0A1E
1950-
CP '"' ; 22H
1965+
CP TK_MINUS
1966+
JP Z,EvalMinusTerm
1967+
CP '"'
19511968
JP Z,GetStringConstant
19521969
CP TK_NOT ; 0A2H
19531970
JP Z,L0AF9
@@ -1959,20 +1976,20 @@ L09E6: LD (VALTYP),A
19591976
;The only possibility left is a bracketed expression. Here we check for an opening bracket, recurse into EvalExpression, and return.
19601977
L0A16: RST SyntaxCheck
19611978
DB '('
1962-
CALL EvalExpression
1979+
CALL EvalExpression
19631980
RST SyntaxCheck
19641981
L0A1C: DB ')'
19651982
RET
19661983

19671984
EvalMinusTerm:
1968-
L0A1E: LD D,7DH
1985+
LD D,7DH
19691986
CALL L0978
19701987
LD HL,(PROG_PTR_TEMP2)
19711988
PUSH HL
19721989
CALL FNegate
19731990
L0A2A: CALL IsNumeric
19741991
POP HL
1975-
RET
1992+
RET
19761993

19771994
;Evaluate a variable. The call to GetVar returns the address of the variable's value in DE, which is then moved to HL then the call to FLoadFromMem loads FACCUM with the variable's value.
19781995
EvalVarTerm:
@@ -1988,13 +2005,13 @@ EvalVarTerm:
19882005

19892006
; Evaluate an inline function. First we get the offset into the KW_INLINE_FNS table into BC and stick it on the stack.
19902007
EvalInlineFn:
1991-
LD B,00H
1992-
RLCA
1993-
LD C,A
1994-
PUSH BC
2008+
LD B,00H
2009+
RLCA
2010+
LD C,A
2011+
PUSH BC
19952012
;Evaluate function argument
1996-
RST NextChar
1997-
LD A,C
2013+
RST NextChar
2014+
LD A,C
19982015
CP 2*(TK_LEFTS-TK_SGN)-1 ; Это строковые функции fn$ с несколькими параметрами?
19992016
JP C,L0A65 ; Нет, обычная
20002017

@@ -2032,7 +2049,7 @@ SkipFnArgs:
20322049
EX (SP),HL
20332050
LD DE,L0A2A
20342051
PUSH DE
2035-
L0A6D: LD BC, KW_INLINE_FNS ; 0043H
2052+
L0A6D: LD BC, KW_INLINE_FNS
20362053
ADD HL,BC
20372054
LD C,(HL)
20382055
INC HL
@@ -2136,15 +2153,15 @@ L0AD7: LD A,E
21362153
JP Z,L0AD7
21372154
CCF
21382155
JP L12D0
2139-
2156+
21402157
L0AEF: INC A
21412158
ADC A,A
21422159
POP BC
21432160
AND B
21442161
ADD A,0FFH
21452162
SBC A,A
21462163
JP FCharToFloat
2147-
2164+
21482165
L0AF9: LD D,5AH
21492166
CALL L0978
21502167
CALL IsNumeric
@@ -2192,11 +2209,11 @@ L0B35: RST NextChar
21922209
JP C,L0B35
21932210
CALL CharIsAlpha
21942211
JP NC,L0B35
2195-
L0B3F: SUB '$' ; 24H
2212+
L0B3F: SUB '$'
21962213
JP NZ,L0B4C
21972214
INC A ; A=1, т.е. строковая переменная
21982215
LD (VALTYP),A
2199-
RRCA
2216+
RRCA
22002217
ADD A,C
22012218
LD C,A
22022219
RST NextChar
@@ -2214,8 +2231,8 @@ L0B4C: LD A,(NO_ARRAY)
22142231

22152232
;Loop to find the variable if it's already been allocated. If HL==DE then we've reached VAR_ARRAY_BASE without finding it, and so can jump ahead to allocate a new variable.
22162233
FindVarLoop:
2217-
RST CompareHLDE
2218-
JP Z,AllocNewVar
2234+
RST CompareHLDE
2235+
JP Z,AllocNewVar
22192236
LD A,C
22202237
SUB (HL)
22212238
INC HL
@@ -2288,7 +2305,7 @@ L0BA5: PUSH DE
22882305
LD (DIM_OR_EVAL),HL
22892306
PUSH DE
22902307
LD HL,(VAR_ARRAY_BASE)
2291-
DB 3EH ;LD A,..
2308+
DB 3EH ;LD A,..
22922309
L0BC6: ADD HL, DE
22932310
EX DE,HL
22942311
LD HL,(VAR_TOP)
@@ -2408,7 +2425,7 @@ L0C57: POP HL
24082425
L0C74: LD HL,(PROG_PTR_TEMP2)
24092426
DEC HL
24102427
RST NextChar
2411-
RET
2428+
RET
24122429

24132430
IF BASICNEW
24142431
Pi:
@@ -2521,7 +2538,7 @@ L0D10: RST SyntaxCheck
25212538
25222539
CHK 0d1fh, "Сдвижка кода"
25232540
Str:
2524-
CALL IsNumeric
2541+
CALL IsNumeric
25252542
CALL FOut
25262543
CALL L0D4F
25272544
CALL EvalCurrentString
@@ -2576,18 +2593,18 @@ L0D65: CP '"' ;22H
25762593
CALL NC,L0D2F
25772594
TempStringToPool:
25782595
LD DE,TMPSTR
2579-
LD HL,(TEMPPT) ;021DH
2596+
LD HL,(TEMPPT)
25802597
LD (FACCUM),HL
25812598
LD A,01H
25822599
LD (VALTYP),A
25832600
CALL L131C
25842601
RST CompareHLDE
25852602
LD E,ERR_ST
25862603
JP Z,Error
2587-
LD (TEMPPT),HL ; 021DH
2604+
LD (TEMPPT),HL
25882605
POP HL
25892606
LD A,(HL)
2590-
RET
2607+
RET
25912608

25922609
PrintString1:
25932610
INC HL
@@ -2821,7 +2838,7 @@ L0EC5: LD HL,(TEMPPT) ;021DH
28212838
EX DE,HL
28222839
RET NZ
28232840

2824-
LD (TEMPPT),HL ; 021DH
2841+
LD (TEMPPT),HL
28252842
PUSH DE
28262843
LD D,B
28272844
LD E,C

0 commit comments

Comments
 (0)