c64.a65.full
1: .setcpu "6502"
2:
3:
4: ASM_JMP = $4C
5: ASM_BIT2 = $24
6: ASM_BIT3 = $2C
7:
8:
9: A6502_FLAGS_N = $80
10: A6502_FLAGS_V = $40
11: A6502_FLAGS_R = $20
12: A6502_FLAGS_B = $10
13: A6502_FLAGS_D = $08
14: A6502_FLAGS_I = $04
15: A6502_FLAGS_Z = $02
16: A6502_FLAGS_C = $01
17:
18: ASC_LF = $0A
19: ASC_CR = $0D
20: ASC_RVS = $12
21: ASC_HOME = $13
22: ASC_INSDEL = $14
23:
24: ASC_LOWERCASE = $0E
25: ASC_UPPERCASE = $8E
26: ASC_DISALLOW_LOWERCASE = $08
27: ASC_ALLOW_LOWERCASE = $09
28:
29: ASC_CURSORLEFTRIGHT = $1D
30: ASC_CURSORUPDOWN = $11
31:
32: .if .defined(C64JAPAN)
33: ASC_PI = $B0
34: .else
35: ASC_PI = $DE
36: .endif
37:
38: KEY_NONE = $40
39: KEY_STOP = $03
40:
41: PETSCII_CRSR_RIGHT = $1D
42:
43:
44:
45:
46: .macro htasc str
47: .repeat .strlen(str)-1,I
48: .byte .strat(str,I)
49: .endrep
50: .byte .strat(str,.strlen(str)-1) | $80
51: .endmacro
52:
53: .macro htasc_floppy_error str
54: .byte .strat(str,0) | $80
55: .repeat .strlen(str)-2,I
56: .byte .strat(str,I + 1)
57: .endrep
58: .byte .strat(str,.strlen(str)-1) | $80
59: .endmacro
60:
61:
62:
63:
64: .macro init_token_tables
65: .segment "VECTORS"
66: TOKEN_ADDRESS_TABLE:
67: .segment "KEYWORDS"
68: TOKEN_NAME_TABLE:
69: .segment "DUMMY"
70: DUMMY_START:
71: .endmacro
72:
73:
74:
75: .macro define_token token
76: .segment "DUMMY"
77: .ifnblank token
78: token := <(*-DUMMY_START)+$80
79: .endif
80: .res 1
81: .endmacro
82:
83:
84: .macro keyword key, token
85: .segment "KEYWORDS"
86: htasc key
87: define_token token
88: .endmacro
89:
90:
91:
92: .macro keyword_rts key, vec, token
93: .segment "VECTORS"
94: .word vec-1
95: keyword key, token
96: .endmacro
97:
98:
99:
100: .macro keyword_addr key, vec, token
101: .segment "VECTORS"
102: .addr vec
103: keyword key, token
104: .endmacro
105:
106: .macro count_tokens
107: .segment "DUMMY"
108: NUM_TOKENS := <(*-DUMMY_START)
109: .endmacro
110:
111: .macro init_error_table
112: .segment "DUMMY"
113: DUMMY_START_ERROR:
114:
115: .segment "ERROR"
116: ERROR_MESSAGES:
117: .endmacro
118:
119: .ifdef CBM2_EXT_FILE_ERRORS
120: .macro define_error_token token
121: .segment "DUMMY"
122: .ifnblank token
123: token := <(*-DUMMY_START_ERROR + 1)
124: .endif
125: .res 1
126: .endmacro
127:
128: .macro define_error error, msg, addr
129: .segment "ERROR"
130: addr := *
131: htasc msg
132: define_error_token error
133: .endmacro
134:
135: .else
136: .macro define_error error, msg, addr
137: .segment "ERROR"
138: error := <(*-ERROR_MESSAGES)
139: htasc msg
140: .endmacro
141:
142: .endif
143:
144:
145:
146: .macro asc80 str
147: .repeat .strlen(str),I
148: .byte .strat(str,I)+$80
149: .endrep
150: .endmacro
151:
152:
153:
154:
155:
156: COMPUTER_UNKNOWN=0
157:
158: VIC20_GENERAL=COMPUTER_UNKNOWN + $10
159: VIC20_02=VIC20_GENERAL + 2
160: VIC20_06=VIC20_GENERAL + 6
161: VIC20_07=VIC20_GENERAL + 7
162:
163: C64_GENERAL=VIC20_GENERAL + $20
164: C64_01=C64_GENERAL + 1
165: C64_02=C64_GENERAL + 2
166: C64_03=C64_GENERAL + 3
167: C64_SX64=C64_GENERAL + 4
168: C64_4064=C64_GENERAL + 5
169: C64_GS=C64_GENERAL + 6
170:
171: .ifdef vic20
172: CompileComputer=VIC20_GENERAL + vic20
173: .elseif .defined(c64)
174: .if c64 = 4064
175: CompileComputer=C64_4064
176: .else
177: CompileComputer=C64_GENERAL + c64
178: .endif
179: .endif
180:
181: .ifdef sx64
182: CompileComputer=C64_SX64
183: c64 = sx64
184: .endif
185:
186: .ifdef c64gs
187: CompileComputer=C64_GS
188: c64 = c64gs
189: .endif
190:
191: .ifndef CompileComputer
192: CompileComputer=COMPUTER_UNKNOWN
193: .endif
194:
195: .macro FillCount count,filler
196: .repeat count
197: .ifblank filler
198: .byte DRIVEFILLER
199: .else
200: .byte filler
201: .endif
202: .endrep
203: .endmacro
204:
205: .macro FillUntil address,filler
206: FillCount address-*,filler
207: .endmacro
208:
209: .macro FillNOP count
210: FillCount count,$EA
211: .endmacro
212:
213: IEEE_LISTEN = $20
214: IEEE_TALK = $40
215: IEEE_OPEN = $60
216: IEEE_CLOSE = $E0
217: IEEE_SECONDARY = $F0
218:
219: IEEE_LOAD = IEEE_OPEN + 0
220: IEEE_SAVE = IEEE_OPEN + 1
221:
222: IEEE_UNLISTEN = IEEE_LISTEN + $1F
223: IEEE_UNTALK = IEEE_TALK + $1F
224:
225: STATUS_IEC_DEVICE_NOT_PRESENT = $80
226: STATUS_IEC_EOI = $40
227: STATUS_IEC_TIMEOUT_READ = $02
228: STATUS_IEC_TIMEOUT_WRITE = $01
229:
230: STATUS_VERIFY = $10
231:
232: STATUS_TAPE_EOT = $80
233: STATUS_TAPE_EOF = $40
234: STATUS_TAPE_CHKSUM_ERR = $20
235: STATUS_TAPE_UNRECOVERABLE_READ_ERROR = $10
236: STATUS_TAPE_LONG_BLOCK = $08
237: STATUS_TAPE_SHORT_BLOCK = $04
238:
239:
240: FREQUENCY_1MHZ = 1000000
241: FREQUENCY_NTSC = 1022700
242: FREQUENCY_PAL = 985248
243:
244: DEFAULT_INIT_VALUE_CIA1_TA_1MHZ = ((FREQUENCY_1MHZ + 59) / 60)
245: DEFAULT_INIT_VALUE_CIA1_TA_NTSC = ((FREQUENCY_NTSC + 59) / 60)
246: DEFAULT_INIT_VALUE_CIA1_TA_PAL = ((FREQUENCY_PAL + 59) / 60)
247:
248: .if CompileComputer=C64_01
249: DRIVEFILLER=$AA
250: VERSION_FF80=$AA
251: VERSION_E4AC=$2B
252: BASIC_END := $E3A2
253: SET_COLOR_FRAME := COL_LIGHTBLUE
254: SET_COLOR_BACKGROUND := COL_BLUE
255: TEXT_SHIFTRUNSTOP = TEXT_LOADRUN
256: END_TEXT_SHIFTRUNSTOP = END_TEXT_LOADRUN
257:
258: DEFAULT_COLOR := COL_LIGHTBLUE
259:
260: .elseif CompileComputer=C64_02
261: DRIVEFILLER=$AA
262: VERSION_FF80=0
263: BASIC_END := $E3A2
264: TEXT_SHIFTRUNSTOP = TEXT_LOADRUN
265: END_TEXT_SHIFTRUNSTOP = END_TEXT_LOADRUN
266: .if .defined(C64JAPAN)
267: VERSION_E4AC=$0
268: SET_COLOR_FRAME := COL_CYAN
269: SET_COLOR_BACKGROUND := COL_WHITE
270: DEFAULT_COLOR := COL_BLUE
271: .else
272: VERSION_E4AC=$5C
273: SET_COLOR_FRAME := COL_LIGHTBLUE
274: SET_COLOR_BACKGROUND := COL_BLUE
275: DEFAULT_COLOR := COL_LIGHTBLUE
276: .endif
277:
278: .elseif CompileComputer=C64_03
279: DRIVEFILLER=$AA
280: VERSION_FF80=3
281: VERSION_E4AC=$81
282: BASIC_END := $E3A2
283: SET_COLOR_FRAME := COL_LIGHTBLUE
284: SET_COLOR_BACKGROUND := COL_BLUE
285: TEXT_SHIFTRUNSTOP = TEXT_LOADRUN
286: END_TEXT_SHIFTRUNSTOP = END_TEXT_LOADRUN
287:
288: DEFAULT_COLOR := COL_LIGHTBLUE
289:
290: .elseif CompileComputer=C64_4064
291: DRIVEFILLER=$AA
292: VERSION_FF80=$64
293: VERSION_E4AC=$63
294: BASIC_END := $E3A2
295: SET_COLOR_FRAME := COL_BLACK
296: SET_COLOR_BACKGROUND := COL_BLACK
297: TEXT_SHIFTRUNSTOP = TEXT_LOADRUN
298: END_TEXT_SHIFTRUNSTOP = END_TEXT_LOADRUN
299:
300: DEFAULT_COLOR := COL_WHITE
301:
302: .elseif CompileComputer=C64_SX64
303: DRIVEFILLER=$AA
304: VERSION_FF80=$43
305: VERSION_E4AC=$B3
306: BASIC_END := $E3A2
307: SET_COLOR_FRAME := COL_CYAN
308: SET_COLOR_BACKGROUND := COL_WHITE
309: TEXT_SHIFTRUNSTOP = TEXT_LOAD_8_RUN
310: END_TEXT_SHIFTRUNSTOP = END_TEXT_LOAD_8_RUN
311:
312: DEFAULT_COLOR := COL_BLUE
313:
314: .elseif CompileComputer=C64_GS
315: DRIVEFILLER=$AA
316: VERSION_FF80=3
317: VERSION_E4AC=$81
318: BASIC_END := $E3A2
319: SET_COLOR_FRAME := COL_LIGHTBLUE
320: SET_COLOR_BACKGROUND := COL_BLUE
321: TEXT_SHIFTRUNSTOP = TEXT_LOADRUN
322: END_TEXT_SHIFTRUNSTOP = END_TEXT_LOADRUN
323:
324: DEFAULT_COLOR := COL_LIGHTBLUE
325:
326: .endif
327:
328: CHKSUM_BF52 = $EC
329:
330: EDITOR_TAB = 10
331: EDITOR_COLS = 40
332: EDITOR_ROWS = 25
333:
334: EDITOR_MAX_COMBINED_ROWS = 2
335:
336:
337: .segment "MEM_BASIC_ZP": zeropage
338:
339: zADRAY1: .res 2
340: zADRAY2: .res 2
341: zCHARAC: .res 1
342: zENDCHR: .res 1
343: zTRMPOS: .res 1
344: zVERCK: .res 1
345: zCOUNT: .res 1
346: zDIMFLG: .res 1
347: zVALTYP: .res 1
348: zINTFLG: .res 1
349: zGARBFL: .res 1
350: zINTALLOWED: .res 1
351: zSUBFLG: .res 1
352: zTANSGN: .res 1
353: z13: .res 1
354: zLINNUM: .res 2
355: zTEMPPT: .res 1
356: zLASTPT: .res 2
357: zTEMPST: .res 5
358: zCHANNL: .res 4
359: zINDEX: .res 2
360: zINDEX2: .res 2
361: zRESHO: .res 5
362: zTEMP_28 := zRESHO + 2
363: zTXTTAB: .res 2
364: zVARTAB: .res 2
365: zARYTAB: .res 2
366: zSTREND: .res 2
367: zFRETOP: .res 2
368: zFRESPC: .res 2
369: zMEMSIZ: .res 2
370: zCURLIN: .res 2
371: zOLDLIN: .res 2
372: zOLDTXT: .res 2
373: zDATLIN: .res 2
374: zDATPTR: .res 2
375: zINPPTR: .res 2
376: zVARNAM: .res 2
377: zVARPNT: .res 2
378: zFORPNT: .res 2
379: zVARTXT: .res 2
380: zOPMASK: .res 1
381: zTEMPF3: .res 5
382: zTEMP_50 := zTEMPF3 + 2
383: zFOUR6: .res 1
384: zJMPER: .res 3
385: zTEMPF1: .res 5
386: zTEMP_58 := zTEMPF1 + 1
387: zTEMP_5A := zTEMPF1 + 3
388: zTEMPF2: .res 5
389: zTEMP_5D := zTEMPF2 + 1
390: zTEMP_5E := zTEMPF2 + 2
391: zTEMP_5F := zTEMPF2 + 3
392: zTEMP_60 := zTEMPF2 + 4
393: zFAC: .res 7
394: zFACEXP := zFAC
395: zFACHO := zFAC + 1
396: zFACSGN := zFAC + 5
397: zSGNFLG := zFAC + 6
398: zBITS: .res 1
399: zARG: .res 7
400: zARGEXP := zARG
401: zARGHO := zARG + 1
402: zARGSGN := zARG + 5
403: zARISGN := zARG + 6
404: zFACOV: .res 1
405: zFBUFPT: .res 2
406: zCHRGET: .res 6
407: zCHRGOT: .res 7
408: zCHRGOT_SPACE: .res 11
409: zTXTPTR := zCHRGOT + 1
410: zRNDX: .res 5
411:
412: .segment "MEM_BASIC_ZP2": zeropage
413:
414: zASCWRK: .res 1
415:
416: .segment "STACK"
417:
418: lSTACK: .res 256
419:
420: .segment "MEM_BASIC_DATA_0200"
421:
422: lBUF: .res 89
423: END_lBUF:
424:
425: .segment "MEM_BASIC_DATA_0300"
426:
427: lIERROR: .res 2
428: lIMAIN: .res 2
429: lICRNCH: .res 2
430: lIQPLOP: .res 2
431: lIGONE: .res 2
432: lIEVAL: .res 2
433: lSAREG: .res 1
434: lSXREG: .res 1
435: lSYREG: .res 1
436: lSPREG: .res 1
437:
438: .if CompileComputer >= C64_GENERAL
439: .segment "MEM_BASIC_USR"
440: .else
441: .segment "MEM_BASIC_USR": zeropage
442: .endif
443:
444: lUSRPOK: .res 1
445: lUSRADD: .res 2
446:
447: .segment "C6510_ZP": zeropage
448:
449: zD6510: .res 1
450: zR6510: .res 1
451:
452: lVICSCN := $0400
453: lSPNTRN := $07F8
454:
455: CARTRIDGE := $8000
456: CART_RESET := CARTRIDGE + 0
457: CART_NMI := CARTRIDGE + 2
458: CART_MAGIC := CARTRIDGE + 4
459:
460:
461: VICII_O_Sprite0X := 0
462: VICII_O_Sprite0Y := 1
463: VICII_O_Sprite1X := 2
464: VICII_O_Sprite1Y := 3
465: VICII_O_Sprite2X := 4
466: VICII_O_Sprite2Y := 5
467: VICII_O_Sprite3X := 6
468: VICII_O_Sprite3Y := 7
469: VICII_O_Sprite4X := 8
470: VICII_O_Sprite4Y := 9
471: VICII_O_Sprite5X := 10
472: VICII_O_Sprite5Y := 11
473: VICII_O_Sprite6X := 12
474: VICII_O_Sprite6Y := 13
475: VICII_O_Sprite7X := 14
476: VICII_O_Sprite7Y := 15
477: VICII_O_SpriteXMSB := 16
478:
479: VICII_O_ControlReg1 := 17
480: VICII_B_ControlReg1_Raster8 := $80
481: VICII_B_ControlReg1_ECM := $40
482: VICII_B_ControlReg1_BMM := $20
483: VICII_B_ControlReg1_DEN := $10
484: VICII_B_ControlReg1_RSEL := $08
485: VICII_B_ControlReg1_YSCROLL_MASK := $07
486:
487: VICII_O_Raster := 18
488: VICII_O_LightPenX := 19
489: VICII_O_LightPenY := 20
490: VICII_O_SprEnable := 21
491:
492: VICII_O_ControlReg2 := 22
493: VICII_B_ControlReg2_Reserved1 := $80
494: VICII_B_ControlReg2_Reserved2 := $40
495: VICII_B_ControlReg2_RES := $20
496: VICII_B_ControlReg2_MCM := $10
497: VICII_B_ControlReg2_CSEL := $08
498: VICII_B_ControlReg2_XSCROLL_MASK := $07
499:
500: VICII_O_SprExpandY := 23
501:
502: VICII_O_MemControl := 24
503: VICII_B_MemControl_Reserved := $01
504: VICII_B_MemControl_CB_Mask := $0E
505: VICII_B_MemControl_VM_Mask := $F0
506:
507: VICII_O_IRQFlags := 25
508: VICII_B_IRQFlags_RST := $01
509: VICII_B_IRQFlags_MBC := $02
510: VICII_B_IRQFlags_MMC := $04
511: VICII_B_IRQFlags_LP := $08
512: VICII_B_IRQFlags_Reserved := $70
513: VICII_B_IRQFlags_Any := $80
514:
515: VICII_O_IRQMasks := 26
516: VICII_B_IRQMasks_RST := VICII_B_IRQFlags_RST
517: VICII_B_IRQMasks_MBC := VICII_B_IRQFlags_MBC
518: VICII_B_IRQMasks_MMC := VICII_B_IRQFlags_MMC
519: VICII_B_IRQMasks_LP := VICII_B_IRQFlags_LP
520: VICII_B_IRQMasks_Reserved := $F0
521:
522: VICII_O_SprPriority := 27
523: VICII_O_SprMCM := 28
524: VICII_O_SprExpandX := 29
525: VICII_O_SprSprColl := 30
526: VICII_O_SprBackColl := 31
527:
528: VICII_O_BorderCol := 32
529: VICII_O_BackgCol0 := 33
530: VICII_O_BackgCol1 := 34
531: VICII_O_BackgCol2 := 35
532: VICII_O_BackgCol3 := 36
533:
534: VICII_O_SprMCMCol0 := 37
535: VICII_O_SprMCMCol1 := 38
536:
537: VICII_O_Spr0Col := 39
538: VICII_O_Spr1Col := 40
539: VICII_O_Spr2Col := 41
540: VICII_O_Spr3Col := 42
541: VICII_O_Spr4Col := 43
542: VICII_O_Spr5Col := 44
543: VICII_O_Spr6Col := 45
544: VICII_O_Spr7Col := 46
545:
546: VICIIe_O_Keyboard := 47
547: VICIIe_B_Keyboard_Reserved_MASK := $F0
548:
549: VICIIe_O_ControlReg3 := 48
550: VICIIe_B_ControlReg3_2MHZ := $01
551: VICIIe_B_ControlReg3_Reserved_MASK := $FE
552:
553: COL_BLACK = 0
554: COL_WHITE = 1
555: COL_RED = 2
556: COL_CYAN = 3
557: COL_VIOLET = 4
558: COL_GREEN = 5
559: COL_BLUE = 6
560: COL_YELLOW = 7
561: COL_ORANGE = 8
562: COL_BROWN = 9
563: COL_LIGHTRED = 10
564: COL_GRAY1 = 11
565: COL_GRAY2 = 12
566: COL_LIGHTGREEN = 13
567: COL_LIGHTBLUE = 14
568: COL_GRAY3 = 15
569:
570: VIC := $D000
571:
572:
573: SID_O_Voc1FreqLo := 0
574: SID_O_Voc1FreqHi := 1
575: SID_O_Voc1PWidthLo := 2
576: SID_O_Voc1PWidthHi := 3
577: SID_O_Voc1Control := 4
578: SID_O_Voc1AttDec := 5
579: SID_O_Voc1SusRel := 6
580: SID_O_Voc2FreqLo := 7
581: SID_O_Voc2FreqHi := 8
582: SID_O_Voc2PWidthLo := 9
583: SID_O_Voc2PWidthHi := 10
584: SID_O_Voc2Control := 11
585: SID_O_Voc2AttDec := 12
586: SID_O_Voc2SusRel := 13
587: SID_O_Voc3FreqLo := 14
588: SID_O_Voc3FreqHi := 15
589: SID_O_Voc3PWidthLo := 16
590: SID_O_Voc3PWidthHi := 17
591: SID_O_Voc3Control := 18
592: SID_O_Voc3AttDec := 19
593: SID_O_Voc3SusRel := 20
594: SID_O_FiltFreqLo := 21
595: SID_O_FiltFreqHi := 22
596: SID_O_FiltControl := 23
597: SID_O_FiltMode := 24
598: SID_O_ADC1 := 25
599: SID_O_ADC2 := 26
600: SID_O_Random := 27
601: SID_O_Voc3Output := 28
602:
603: SID := $D400
604:
605: COLORRAM := $D800
606:
607:
608: CIA_O_PA := 0
609: CIA_O_PB := 1
610: CIA_O_DDRA := 2
611: CIA_O_DDRB := 3
612: CIA_O_TALO := 4
613: CIA_O_TAHI := 5
614: CIA_O_TBLO := 6
615: CIA_O_TBHI := 7
616: CIA_O_TOD10THS := 8
617: CIA_O_TODSEC := 9
618: CIA_O_TODMIN := 10
619: CIA_O_TODHR := 11
620: CIA_O_SDR := 12
621: CIA_O_ICR := 13
622: CIA_O_CRA := 14
623: CIA_O_CRB := 15
624:
625: CIA_ICR_B_TA := $01
626: CIA_ICR_B_TB := $02
627: CIA_ICR_B_TOD := $04
628: CIA_ICR_B_SP := $08
629: CIA_ICR_B_FLAG := $10
630: CIA_ICR_B_UNUSED := $60
631: CIA_ICR_BR_IR := $80
632: CIA_ICR_BW_SET := $80
633: CIA_ICR_BW_UNSET := $00
634:
635: CIA_CRA_B_START := $01
636: CIA_CRA_B_PBON := $02
637: CIA_CRA_B_TOGGLE := $04
638: CIA_CRA_B_ONESHOT := $08
639: CIA_CRA_B_FORCE_LOAD := $10
640: CIA_CRA_B_COUNT_CNT := $20
641: CIA_CRA_B_SP_OUTPUT := $40
642: CIA_CRA_B_50HZ := $80
643:
644: CIA_CRB_B_START := $01
645: CIA_CRB_B_PBON := $02
646: CIA_CRB_B_TOGGLE := $04
647: CIA_CRB_B_ONESHOT := $08
648: CIA_CRB_B_FORCE_LOAD := $10
649: CIA_CRB_B_TOD_ALARM := $80
650:
651: CIA_CRB_B_MODE_MASK := $60
652: CIA_CRB_B_MODE_PHI2 := $00
653: CIA_CRB_B_MODE_CNT := $20
654: CIA_CRB_B_MODE_TA_ := $40
655: CIA_CRB_B_MODE_TA_WITH_CNT := $60
656:
657: CIA1 := $DC00
658:
659: CIA2 := $DD00
660:
661: CIA2_PA_B_VA14 := $01
662: CIA2_PA_B_VA15 := $02
663: CIA2_PA_B_RS232_TXD := $04
664: CIA2_PA_B_IEC_ATN_OUT := $08
665: CIA2_PA_B_IEC_CLK_OUT := $10
666: CIA2_PA_B_IEC_DATA_OUT := $20
667: CIA2_PA_B_IEC_CLK_IN := $40
668: CIA2_PA_B_IEC_DATA_IN := $80
669:
670: CIA2_PB_B_RS232_RXD := $01
671: CIA2_PB_B_RS232_RTS := $02
672: CIA2_PB_B_RS232_DTR := $04
673: CIA2_PB_B_RS232_RING := $08
674: CIA2_PB_B_RS232_DCD := $10
675: CIA2_PB_B_RS232_PB5 := $20
676: CIA2_PB_B_RS232_CTS := $40
677: CIA2_PB_B_RS232_DSR := $80
678:
679:
680: P6510_B_LORAM := $01
681: P6510_B_HIRAM := $02
682: P6510_B_CHAREN := $04
683: P6510_B_CASS_WRITE := $08
684: P6510_B_CASS_SENSE := $10
685: P6510_B_CASS_MOTOR := $20
686: P6510_B_UNUSED := $C0
687:
688: P6510_B_MASK := ~ P6510_B_UNUSED
689:
690: IOBASE := CIA1
691:
692: FILE_KEYBOARD := 0
693: FILE_TAPE := 1
694: FILE_RS232 := 2
695: FILE_SCREEN := 3
696: FILE_IEC := 4
697:
698: KEY_SHIFTRUN := $83
699:
700: IEC_REG := CIA2 + CIA_O_PA
701: IEC_DDR := CIA2 + CIA_O_DDRA
702:
703: IEC_B_ATN_OUT := CIA2_PA_B_IEC_ATN_OUT
704: IEC_B_CLK_OUT := CIA2_PA_B_IEC_CLK_OUT
705: IEC_B_DATA_OUT := CIA2_PA_B_IEC_DATA_OUT
706: IEC_B_CLK_IN := CIA2_PA_B_IEC_CLK_IN
707: IEC_B_DATA_IN := CIA2_PA_B_IEC_DATA_IN
708:
709: IEC_REG_ATN_OUT := CIA2 + CIA_O_PA
710: IEC_REG_DATA_CLK_OUT := CIA2 + CIA_O_PA
711: IEC_REG_DATA_CLK_IN := CIA2 + CIA_O_PA
712:
713: IEC_TIMER_LO := CIA1 + CIA_O_TBLO
714: IEC_TIMER_HI := CIA1 + CIA_O_TBHI
715:
716: IEC_TIMER_FLAG_REG := CIA1 + CIA_O_ICR
717: IEC_TIMER_FLAG_B := CIA_ICR_B_TB
718:
719: TAPE_REG := zR6510
720: TAPE_DDR := zD6510
721: TAPE_B_WRITE := P6510_B_CASS_WRITE
722: TAPE_B_SENSE := P6510_B_CASS_SENSE
723: TAPE_B_MOTOR_ON_ALL := P6510_B_CASS_MOTOR
724: TAPE_B_MOTOR_ON := P6510_B_CASS_MOTOR
725: TAPE_B_MOTOR_OFF_AND := ~ P6510_B_CASS_MOTOR & P6510_B_MASK
726:
727: TAPE_REG_WRITE := zR6510
728: TAPE_REG_SENSE := zR6510
729: TAPE_REG_MOTOR := zR6510
730: TAPE_REG_ICR := CIA1 + CIA_O_ICR
731: TAPE_REG_ICR_B_CLEARALL := CIA_ICR_BW_UNSET | $7F
732: TAPE_REG_ICR_B_CASSREAD := CIA_ICR_BW_SET | CIA_ICR_B_FLAG
733: TAPE_REG_ICR_B_WR_TIMER := CIA_ICR_BW_SET | CIA_ICR_B_TB
734: TAPE_REG_ICR_B_SET_3 := CIA_ICR_BW_SET | CIA_ICR_B_TA
735: TAPE_REG_ICR_B_UNSET_3 := CIA_ICR_BW_UNSET | CIA_ICR_B_TA
736:
737: TAPE_TIMER1_LO := CIA1 + CIA_O_TBLO
738: TAPE_TIMER1_HI := CIA1 + CIA_O_TBHI
739: TAPE_TIMER2_LO := CIA1 + CIA_O_TALO
740: TAPE_TIMER2_HI := CIA1 + CIA_O_TAHI
741: TAPE_TIMER1_CONST := $16
742:
743: KEYB_ROW := CIA1 + CIA_O_PA
744: KEYB_COL := CIA1 + CIA_O_PB
745: KEYB_COL_FOR_STOP := KEYB_COL
746:
747: KEYB_ROW_CTRL := $7F
748: KEYB_COL_CTRL := $FB
749: KEYB_ROW_STOP := $BD
750: KEYB_ROW_STANDARD := $7F
751: KEYB_CHECK_STOP := $7F
752:
753: RS232_TXD_REG := CIA2 + CIA_O_PA
754: RS232_TXD_BIT := CIA2_PA_B_RS232_TXD
755:
756: RS232_REG_1 := CIA2 + CIA_O_PB
757: RS232_REG_2 := CIA2 + CIA_O_PB
758: RS232_TIMER_LO := CIA2 + CIA_O_TALO
759: RS232_TIMER_HI := CIA2 + CIA_O_TAHI
760:
761:
762:
763: .segment "HEADER"
764:
765: BASIC_START:
766:
767: bRESTART:
768: .addr LE394
769: .addr LE37B
770: .byte "CBMBASIC"
771:
772:
773:
774:
775:
776:
777: .segment "VECTORS"
778:
779: .segment "KEYWORDS"
780:
781: CONFIG_FILE=1
782: CONFIG_CBM_ALL=1
783: CONFIG_2=1
784:
785:
786:
787: .segment "VECTORS"
788:
789: bSTMDSP = TOKEN_ADDRESS_TABLE
790: bFUNDSP = UNFNC
791:
792:
793:
794:
795:
796:
797:
798:
799: bOPTAB = MATHTBL
800:
801:
802:
803: bRESLST = TOKEN_NAME_TABLE
804:
805:
806:
807:
808:
809:
810: TokPi = $FF
811:
812:
813: .segment "ERROR"
814:
815:
816:
817:
818: ErrTooManyFiles = 1
819: ErrFileOpen = 2
820: ErrFileNotOpen = 3
821: ErrFileNotFound = 4
822: ErrDeviceNotPresent = 5
823: ErrNotInputFile = 6
824: ErrNotOutputFile = 7
825: ErrMissingFileName = 8
826: ErrIllegalDeviceNumber = 9
827: ErrNextWithoutFor = 10
828: ErrSyntax = 11
829: ErrReturnWithoutGosub = 12
830: ErrOutOfData = 13
831: ErrIllegalQuantity = 14
832: ErrOverflow = 15
833: ErrOutOfMemory = 16
834: ErrUndefinedStatement = 17
835: ErrBadSubscript = 18
836: ErrRedimdArray = 19
837: ErrDivisionByZero = 20
838: ErrIllegalDirect = 21
839: ErrTypeMismatch = 22
840: ErrStringTooLong = 23
841: ErrFileData = 24
842: ErrFormulaTooComplex = 25
843: ErrCantContinue = 26
844: ErrUndefdFunction = 27
845: ErrVerify = 28
846: ErrLoad = 29
847: ErrBreak = 30
848:
849:
850: bERRTAB:
851: StrTooManyFiles:
852: htasc "TOO MANY FILES"
853: StrFileOpen:
854: htasc "FILE OPEN"
855: StrFileNotOpen:
856: htasc "FILE NOT OPEN"
857: StrFileNotFound:
858: htasc "FILE NOT FOUND"
859: StrDeviceNotPresent:
860: htasc "DEVICE NOT PRESENT"
861: StrNotInputFile:
862: htasc "NOT INPUT FILE"
863: StrNotOutputFile:
864: htasc "NOT OUTPUT FILE"
865: StrMissingFileName:
866: htasc "MISSING FILE NAME"
867: StrIllegalDeviceNumber:
868: htasc "ILLEGAL DEVICE NUMBER"
869: StrNextWithoutFor:
870: htasc "NEXT WITHOUT FOR"
871: StrSyntax:
872: htasc "SYNTAX"
873: StrReturnWithoutGosub:
874: htasc "RETURN WITHOUT GOSUB"
875: StrOutOfData:
876: htasc "OUT OF DATA"
877: StrIllegalQuantity:
878: htasc "ILLEGAL QUANTITY"
879: StrOverflow:
880: htasc "OVERFLOW"
881: StrOutOfMemory:
882: htasc "OUT OF MEMORY"
883: StrUndefinedStatement:
884: htasc "UNDEF'D STATEMENT"
885: StrBadSubscript:
886: htasc "BAD SUBSCRIPT"
887: StrRedimdArray:
888: htasc "REDIM'D ARRAY"
889: StrDivisionByZero:
890: htasc "DIVISION BY ZERO"
891: StrIllegalDirect:
892: htasc "ILLEGAL DIRECT"
893: StrTypeMismatch:
894: htasc "TYPE MISMATCH"
895: StrStringTooLong:
896: htasc "STRING TOO LONG"
897: StrFileData:
898: htasc "FILE DATA"
899: StrFormulaTooComplex:
900: htasc "FORMULA TOO COMPLEX"
901: StrCantContinue:
902: htasc "CAN'T CONTINUE"
903: StrUndefdFunction:
904: htasc "UNDEF'D FUNCTION"
905: StrVerify:
906: htasc "VERIFY"
907: StrLoad:
908: htasc "LOAD"
909:
910:
911:
912: bERRPTR:
913: .addr StrTooManyFiles
914: .addr StrFileOpen
915: .addr StrFileNotOpen
916: .addr StrFileNotFound
917: .addr StrDeviceNotPresent
918: .addr StrNotInputFile
919: .addr StrNotOutputFile
920: .addr StrMissingFileName
921: .addr StrIllegalDeviceNumber
922: .addr StrNextWithoutFor
923: .addr StrSyntax
924: .addr StrReturnWithoutGosub
925: .addr StrOutOfData
926: .addr StrIllegalQuantity
927: .addr StrOverflow
928: .addr StrOutOfMemory
929: .addr StrUndefinedStatement
930: .addr StrBadSubscript
931: .addr StrRedimdArray
932: .addr StrDivisionByZero
933: .addr StrIllegalDirect
934: .addr StrTypeMismatch
935: .addr StrStringTooLong
936: .addr StrFileData
937: .addr StrFormulaTooComplex
938: .addr StrCantContinue
939: .addr StrUndefdFunction
940: .addr StrVerify
941: .addr StrLoad
942: .addr StrBreak
943:
944: bOKK: .byte $0D,"OK",$0D,$00
945:
946: .segment "CODE"
947:
948: StrError:
949: .if CompileComputer >= C64_GENERAL
950: .byte ' '
951: .else
952: .byte $0D
953: .endif
954: .byte " ERROR"
955: .byte $00
956:
957: StrIn:
958: .byte " IN "
959: .byte $00
960:
961: StrReady:
962: .byte $0D,$0A
963: .byte "READY."
964: .byte $0D,$0A,$00
965:
966: StrCrBreak:
967: .byte $0D,$0A
968: StrBreak:
969: .byte "BREAK"
970: .byte $00
971:
972: .byte $A0
973:
974:
975:
976:
977:
978:
979:
980:
981:
982:
983:
984:
985:
986:
987:
988:
989:
990:
991:
992:
993:
994:
995:
996:
997:
998:
999:
1000:
1001: bFNDFOR:
1002: tsx
1003: inx
1004: inx
1005: inx
1006: inx
1007: @Loop:
1008:
1009: lda lSTACK + 1,x
1010: cmp #TokFor
1011: bne @Ret
1012:
1013:
1014: lda zFORPNT + 1
1015: bne @TestVar
1016:
1017:
1018:
1019: lda lSTACK + 2,x
1020: sta zFORPNT
1021: lda lSTACK + 3,x
1022: sta zFORPNT + 1
1023:
1024:
1025:
1026:
1027:
1028: @TestVar:
1029: cmp lSTACK + 3,x
1030: bne @UnWind
1031: lda zFORPNT
1032: cmp lSTACK + 2,x
1033: beq @Ret
1034:
1035:
1036:
1037:
1038: @UnWind:
1039:
1040: txa
1041: clc
1042: adc #18
1043: tax
1044:
1045:
1046:
1047:
1048:
1049: bne @Loop
1050:
1051: @Ret: rts
1052:
1053:
1054: bBLTU: jsr bREASON
1055: sta zSTREND
1056: sty zSTREND + 1
1057:
1058:
1059:
1060:
1061:
1062:
1063:
1064:
1065:
1066:
1067:
1068: MoveMem:
1069:
1070: @OldBegin = zTEMP_5F
1071: @OldEndP1 = zTEMP_5A
1072: @NewEndP1 = zTEMP_58
1073:
1074:
1075:
1076:
1077: sec
1078: lda @OldEndP1
1079: sbc @OldBegin
1080: sta zINDEX
1081: tay
1082: lda @OldEndP1 + 1
1083: sbc @OldBegin + 1
1084: tax
1085:
1086: inx
1087: tya
1088: beq @SkipPartialPage
1089:
1090:
1091:
1092:
1093:
1094:
1095: lda @OldEndP1
1096: sec
1097: sbc zINDEX
1098: sta @OldEndP1
1099: bcs @CalcNewEnd
1100: dec @OldEndP1 + 1
1101: sec
1102:
1103: @CalcNewEnd:
1104: lda @NewEndP1
1105: sbc zINDEX
1106: sta @NewEndP1
1107: bcs @ProcessNextPage
1108: dec @NewEndP1 + 1
1109: bcc @ProcessNextPage
1110:
1111:
1112: @Loop:
1113: lda (@OldEndP1),y
1114: sta (@NewEndP1),y
1115: @ProcessNextPage:
1116: dey
1117: bne @Loop
1118:
1119:
1120: lda (@OldEndP1),y
1121: sta (@NewEndP1),y
1122:
1123: @SkipPartialPage:
1124:
1125:
1126:
1127: dec @OldEndP1 + 1
1128: dec @NewEndP1 + 1
1129: dex
1130: bne @ProcessNextPage
1131: rts
1132:
1133:
1134:
1135:
1136:
1137:
1138:
1139:
1140:
1141:
1142:
1143:
1144:
1145:
1146:
1147:
1148:
1149: bGETSTK:
1150:
1151: asl a
1152: adc #$3E
1153: bcs bOMERR
1154: sta zINDEX
1155:
1156:
1157: tsx
1158: cpx zINDEX
1159: bcc bOMERR
1160: rts
1161:
1162: bREASON:
1163: cpy zFRETOP + 1
1164: bcc @Ret
1165: bne @LA412
1166: cmp zFRETOP
1167: bcc @Ret
1168:
1169:
1170:
1171: @SAVE_AREA_SIZE = zFACEXP - zTEMPF1
1172:
1173: @LA412: pha
1174: ldx #@SAVE_AREA_SIZE - 1
1175: tya
1176: @LA416: pha
1177: lda zTEMPF1,x
1178: dex
1179: bpl @LA416
1180:
1181: jsr bGARBAG
1182:
1183:
1184: ldx #-(@SAVE_AREA_SIZE - 1)
1185: @LA421: pla
1186: sta zTEMPF1 + @SAVE_AREA_SIZE,x
1187: inx
1188: bmi @LA421
1189: pla
1190: tay
1191: pla
1192: cpy zFRETOP + 1
1193: bcc @Ret
1194: bne bOMERR
1195: cmp zFRETOP
1196: bcs bOMERR
1197: @Ret: rts
1198:
1199: bOMERR: ldx #ErrOutOfMemory
1200: bERROR: jmp (lIERROR)
1201:
1202:
1203:
1204:
1205:
1206:
1207:
1208:
1209:
1210:
1211:
1212:
1213:
1214: ErrorOut:
1215: txa
1216: asl a
1217: tax
1218: lda bERRPTR - 2,x
1219: sta zINDEX
1220: lda bERRPTR - 1,x
1221: sta zINDEX + 1
1222:
1223: jsr kCLRCHN
1224:
1225: lda #0
1226: sta z13
1227: jsr bCRDO
1228:
1229: jsr LAB45
1230:
1231:
1232:
1233: ldy #0
1234: @Loop: lda (zINDEX),y
1235: pha
1236: and #$7F
1237: jsr LAB47
1238: iny
1239: pla
1240: bpl @Loop
1241:
1242: jsr LA67A
1243:
1244:
1245:
1246: lda #<StrError
1247: ldy #>StrError
1248:
1249: bERRFIN:jsr bSTROUT
1250:
1251: ldy zCURLIN + 1
1252: iny
1253: beq bREADY
1254: jsr bINPRT
1255:
1256: bREADY: lda #<StrReady
1257: ldy #>StrReady
1258: jsr bSTROUT
1259: lda #$80
1260: jsr kSETMSG
1261:
1262: bMAIN: jmp (lIMAIN)
1263: IMAIN: jsr bINLIN
1264: stx zTXTPTR
1265: sty zTXTPTR + 1
1266: jsr zCHRGET
1267: tax
1268: beq bMAIN
1269: ldx #$FF
1270: stx zCURLIN + 1
1271: bcc bMAIN1
1272: jsr bCRUNCH
1273: jmp bGONE
1274: bMAIN1: jsr bLINGET
1275: jsr bCRUNCH
1276: bINSLIN:sty zCOUNT
1277:
1278: @58 = zTEMPF1 + 1
1279: @5A = zTEMPF1 + 3
1280:
1281: @5F = zTEMPF2 + 3
1282:
1283: jsr bFNDLIN
1284: bcc @LA4ED
1285: ldy #1
1286: lda (@5F),y
1287: sta zINDEX + 1
1288: lda zVARTAB
1289: sta zINDEX
1290: lda @5F + 1
1291: sta zINDEX2 + 1
1292: lda @5F
1293: dey
1294: sbc (@5F),y
1295: clc
1296: adc zVARTAB
1297: sta zVARTAB
1298: sta zINDEX2
1299: lda zVARTAB + 1
1300: adc #-1
1301: sta zVARTAB + 1
1302: sbc @5F + 1
1303: tax
1304: sec
1305: lda @5F
1306: sbc zVARTAB
1307: tay
1308: bcs @LA4D7
1309: inx
1310: dec zINDEX2 + 1
1311: @LA4D7:
1312: clc
1313: adc zINDEX
1314: bcc @LA4DF
1315: dec zINDEX + 1
1316: clc
1317: @LA4DF:
1318: lda (zINDEX),y
1319: sta (zINDEX2),y
1320: iny
1321: bne @LA4DF
1322: inc zINDEX + 1
1323: inc zINDEX2 + 1
1324: dex
1325: bne @LA4DF
1326: @LA4ED:
1327: jsr LA659
1328: jsr bLINKPRG
1329: lda lBUF
1330: beq bMAIN
1331: clc
1332: lda zVARTAB
1333: sta @5A
1334: adc zCOUNT
1335: sta @58
1336: ldy zVARTAB + 1
1337: sty @5A + 1
1338: bcc @LA508
1339: iny
1340: @LA508:
1341: sty @58 + 1
1342: jsr bBLTU
1343: lda zLINNUM
1344: ldy zLINNUM + 1
1345: sta lBUF - 2
1346: sty lBUF - 1
1347: lda zSTREND
1348: ldy zSTREND + 1
1349: sta zVARTAB
1350: sty zVARTAB + 1
1351: ldy zCOUNT
1352: dey
1353: @LA522:
1354: lda lBUF - 4,y
1355: sta (@5F),y
1356: dey
1357: bpl @LA522
1358: LA52A: jsr LA659
1359: jsr bLINKPRG
1360: jmp bMAIN
1361: bLINKPRG:
1362: lda zTXTTAB
1363: ldy zTXTTAB + 1
1364: sta zINDEX
1365: sty zINDEX + 1
1366: clc
1367: @LA53C:
1368: ldy #1
1369: lda (zINDEX),y
1370: beq @Ret
1371: ldy #4
1372: @LA544:
1373: iny
1374: lda (zINDEX),y
1375: bne @LA544
1376: iny
1377: tya
1378: adc zINDEX
1379: tax
1380: ldy #0
1381: sta (zINDEX),y
1382: lda zINDEX + 1
1383: adc #0
1384: iny
1385: sta (zINDEX),y
1386: stx zINDEX
1387: sta zINDEX + 1
1388: bcc @LA53C
1389: @Ret: rts
1390:
1391: bINLIN: ldx #0
1392: @LA562: jsr bCHIN
1393: cmp #ASC_CR
1394: beq @LA576
1395: sta lBUF,x
1396: inx
1397: cpx #END_lBUF - lBUF
1398: bcc @LA562
1399: ldx #ErrStringTooLong
1400: jmp bERROR
1401:
1402: @LA576: jmp bSTREND
1403:
1404: bCRUNCH:jmp (lICRNCH)
1405: LA57C: ldx zTXTPTR
1406: ldy #$04
1407: sty zGARBFL
1408: LA582: lda lBUF,x
1409: bpl @LA58E
1410: cmp #TokPi
1411: beq LA5C9
1412: inx
1413: bne LA582
1414: @LA58E:
1415: cmp #' '
1416: beq LA5C9
1417: sta zENDCHR
1418: cmp #'"'
1419: beq LA5EE
1420: bit zGARBFL
1421: bvs LA5C9
1422: cmp #'?'
1423: bne @LA5A4
1424: lda #TokPrint
1425: bne LA5C9
1426: @LA5A4:
1427: cmp #'0'
1428: bcc @LA5AC
1429: cmp #'<'
1430: bcc LA5C9
1431: @LA5AC:
1432: sty zFBUFPT
1433: ldy #0
1434: sty zCOUNT
1435: dey
1436: stx zTXTPTR
1437: dex
1438: LA5B6: iny
1439: inx
1440: LA5B8: lda lBUF,x
1441: sec
1442: sbc bRESLST,y
1443: beq LA5B6
1444: cmp #$80
1445: bne LA5F5
1446: ora zCOUNT
1447: LA5C7: ldy zFBUFPT
1448: LA5C9: inx
1449: iny
1450: sta lBUF - 5,y
1451: lda lBUF - 5,y
1452: beq LA609
1453: sec
1454: sbc #$3A
1455: beq @LA5DC
1456: cmp #$49
1457: bne @LA5DE
1458: @LA5DC:
1459: sta zGARBFL
1460: @LA5DE:
1461: sec
1462: sbc #$55
1463: bne LA582
1464: JDLA5E3:
1465: sta zENDCHR
1466: LA5E5: lda lBUF,x
1467: beq LA5C9
1468: cmp zENDCHR
1469: beq LA5C9
1470: LA5EE: iny
1471: sta lBUF - 5,y
1472: inx
1473: bne LA5E5
1474: LA5F5: ldx zTXTPTR
1475: inc zCOUNT
1476: @LA5F9: iny
1477: lda bRESLST - 1,y
1478: bpl @LA5F9
1479: lda bRESLST,y
1480: bne LA5B8
1481: lda lBUF,x
1482: bpl LA5C7
1483: LA609: sta lBUF - 3,y
1484: dec zTXTPTR + 1
1485: lda #<lBUF - 1
1486: sta zTXTPTR
1487: rts
1488:
1489: bFNDLIN:lda zTXTTAB
1490: ldx zTXTTAB + 1
1491: LA617: ldy #1
1492: sta zTEMP_5F
1493: stx zTEMP_5F + 1
1494: lda (zTEMP_5F),y
1495: beq @RetSuccess
1496: iny
1497: iny
1498: lda zLINNUM + 1
1499: cmp (zTEMP_5F),y
1500: bcc @Ret
1501: beq @LA62E
1502: dey
1503: bne @LA637
1504: @LA62E:
1505: lda zLINNUM
1506: dey
1507: cmp (zTEMP_5F),y
1508: bcc @Ret
1509: beq @Ret
1510: @LA637:
1511: dey
1512: lda (zTEMP_5F),y
1513: tax
1514: dey
1515: lda (zTEMP_5F),y
1516: bcs LA617
1517: @RetSuccess:
1518: clc
1519: @Ret: rts
1520:
1521: RetA641 = @Ret
1522:
1523: bSCRTCH:bne RetA641
1524: LA644: lda #0
1525: tay
1526: sta (zTXTTAB),y
1527: iny
1528: sta (zTXTTAB),y
1529: lda zTXTTAB
1530: clc
1531: adc #<2
1532: sta zVARTAB
1533: lda zTXTTAB + 1
1534: adc #>2
1535: sta zVARTAB + 1
1536:
1537: LA659: jsr bSTXPT
1538: lda #0
1539:
1540: bCLEAR: bne RetA68D
1541: LA660: jsr kCLALL
1542: LA663: lda zMEMSIZ
1543: ldy zMEMSIZ + 1
1544: sta zFRETOP
1545: sty zFRETOP + 1
1546: lda zVARTAB
1547: ldy zVARTAB + 1
1548: sta zARYTAB
1549: sty zARYTAB + 1
1550: sta zSTREND
1551: sty zSTREND + 1
1552: LA677: jsr bRESTOR
1553:
1554: LA67A: ldx #zTEMPST
1555: stx zTEMPPT
1556: pla
1557: tay
1558: pla
1559: ldx #-6
1560: txs
1561: pha
1562: tya
1563: pha
1564: lda #0
1565: sta zOLDTXT + 1
1566: sta zINTALLOWED
1567: RetA68D:
1568: rts
1569:
1570: bSTXPT: clc
1571: lda zTXTTAB
1572: adc #<-1
1573: sta zTXTPTR
1574: lda zTXTTAB + 1
1575: adc #>-1
1576: sta zTXTPTR + 1
1577: rts
1578:
1579: bLIST: bcc LA6A4
1580: beq LA6A4
1581: cmp #TokMinus
1582: bne RetA68D
1583: LA6A4:
1584: jsr bLINGET
1585: jsr bFNDLIN
1586: jsr zCHRGOT
1587: beq @LA6BB
1588: cmp #TokMinus
1589: bne RetA641
1590: jsr zCHRGET
1591: jsr bLINGET
1592: bne RetA641
1593: @LA6BB:
1594: pla
1595: pla
1596: lda zLINNUM
1597: ora zLINNUM + 1
1598: bne LA6C9
1599: JDLA6C3:
1600: lda #-1
1601: sta zLINNUM
1602: sta zLINNUM + 1
1603: LA6C9: ldy #1
1604: sty zGARBFL
1605: lda (zTEMP_5F),y
1606: beq LA714
1607: jsr bSTOP
1608: JDLA6D4:
1609: jsr bCRDO
1610: iny
1611: lda (zTEMP_5F),y
1612: tax
1613: iny
1614: lda (zTEMP_5F),y
1615: cmp zLINNUM + 1
1616: bne @LA6E6
1617: cpx zLINNUM
1618: beq @LA6E8
1619: @LA6E6: bcs LA714
1620: @LA6E8: sty zFORPNT
1621: jsr LBDCD
1622: lda #' '
1623: LA6EF: ldy zFORPNT
1624: and #$7F
1625: LA6F3: jsr LAB47
1626: cmp #'"'
1627: bne LA700
1628: lda zGARBFL
1629: eor #$FF
1630: sta zGARBFL
1631: LA700: iny
1632: beq LA714
1633: lda (zTEMP_5F),y
1634: bne bQPLOP
1635: tay
1636: lda (zTEMP_5F),y
1637: tax
1638: iny
1639: lda (zTEMP_5F),y
1640: stx zTEMP_5F
1641: sta zTEMP_5F + 1
1642: bne LA6C9
1643: LA714:
1644: .if CompileComputer >= C64_GENERAL
1645: jmp ReadyVector
1646: .else
1647: jmp bREADY
1648: .endif
1649:
1650: bQPLOP: jmp (lIQPLOP)
1651: LA71A: bpl LA6F3
1652: cmp #TokPi
1653: beq LA6F3
1654: bit zGARBFL
1655: bmi LA6F3
1656: sec
1657: sbc #$7F
1658: tax
1659: sty zFORPNT
1660: ldy #$FF
1661: @LA72C:
1662: dex
1663: beq @LA737
1664: @LA72F:
1665: iny
1666: lda bRESLST,y
1667: bpl @LA72F
1668: bmi @LA72C
1669: @LA737:
1670: iny
1671: lda bRESLST,y
1672: bmi LA6EF
1673: jsr LAB47
1674: bne @LA737
1675:
1676: bFOR: lda #$80
1677: sta zINTALLOWED
1678: jsr bLET
1679: jsr bFNDFOR
1680: bne @LA753
1681: txa
1682: adc #$0F
1683: tax
1684: txs
1685: @LA753:
1686: pla
1687: pla
1688: lda #$09
1689: jsr bGETSTK
1690: jsr bDATAN
1691: clc
1692: tya
1693: adc zTXTPTR
1694: pha
1695: lda zTXTPTR + 1
1696: adc #0
1697: pha
1698: lda zCURLIN + 1
1699: pha
1700: lda zCURLIN
1701: pha
1702: lda #TokTo
1703: jsr LAEFF
1704: jsr LAD8D
1705: jsr bFRMNUM
1706: lda zFACSGN
1707: ora #$7F
1708: and zFACHO
1709: sta zFACHO
1710: lda #<@LA78B
1711: ldy #>@LA78B
1712: sta zINDEX
1713: sty zINDEX + 1
1714: jmp LAE43
1715:
1716: @LA78B:
1717: lda #<bFPTABL
1718: ldy #>bFPTABL
1719: jsr bMOVFM
1720: jsr zCHRGOT
1721: cmp #TokStep
1722: bne @LA79F
1723: jsr zCHRGET
1724: jsr bFRMNUM
1725: @LA79F:
1726: jsr bSIGN
1727: jsr LAE38
1728: lda zFORPNT + 1
1729: pha
1730: lda zFORPNT
1731: pha
1732: lda #TokFor
1733: pha
1734: bNEWSTT:jsr bSTOP
1735: lda zTXTPTR
1736: ldy zTXTPTR + 1
1737: cpy #>lBUF
1738: nop
1739: beq @LA7BE
1740: sta zOLDTXT
1741: sty zOLDTXT + 1
1742: @LA7BE:
1743: ldy #0
1744: lda (zTXTPTR),y
1745: bne LA807
1746:
1747: bCKEOL: ldy #2
1748: lda (zTXTPTR),y
1749: clc
1750: bne @LA7CE
1751: jmp LA84B
1752: @LA7CE:
1753: iny
1754: lda (zTXTPTR),y
1755: sta zCURLIN
1756: iny
1757: lda (zTXTPTR),y
1758: sta zCURLIN + 1
1759: tya
1760: adc zTXTPTR
1761: sta zTXTPTR
1762: bcc bGONE
1763: inc zTXTPTR + 1
1764:
1765: bGONE: jmp (lIGONE)
1766: LA7E4: jsr zCHRGET
1767: jsr bGONE3
1768: jmp bNEWSTT
1769: bGONE3: beq RetA82B
1770: LA7EF: sbc #TokEnd
1771: bcc @LA804
1772: cmp #TokTab - TokEnd
1773: bcs LA80E
1774: asl a
1775: tay
1776: lda bSTMDSP + 1,y
1777: pha
1778: lda bSTMDSP,y
1779: pha
1780: jmp zCHRGET
1781: @LA804:
1782: jmp bLET
1783:
1784: LA807: cmp #':'
1785: beq bGONE
1786: LA80B: jmp bSYNERR
1787:
1788: LA80E: cmp #TokGo - $80
1789: bne LA80B
1790: jsr zCHRGET
1791: lda #TokTo
1792: jsr LAEFF
1793: jmp bGOTO
1794: bRESTOR:sec
1795: lda zTXTTAB
1796: sbc #1
1797: ldy zTXTTAB + 1
1798: bcs LA827
1799: dey
1800: LA827: sta zDATPTR
1801: sty zDATPTR + 1
1802: RetA82B:
1803: rts
1804:
1805: bSTOP: jsr kSTOP
1806: bSTOP2: bcs LA832
1807: bEND: clc
1808: LA832: bne RetA870
1809: lda zTXTPTR
1810: ldy zTXTPTR + 1
1811: ldx zCURLIN + 1
1812: inx
1813: beq @LA849
1814: sta zOLDTXT
1815: sty zOLDTXT + 1
1816: lda zCURLIN
1817: ldy zCURLIN + 1
1818: sta zOLDLIN
1819: sty zOLDLIN + 1
1820: @LA849:
1821: pla
1822: pla
1823:
1824: LA84B: lda #<StrCrBreak
1825: ldy #>StrCrBreak
1826: bcc LA854
1827: jmp bERRFIN
1828:
1829: LA854:
1830: .if CompileComputer >= C64_GENERAL
1831: jmp ReadyVector
1832: .else
1833: jmp bREADY
1834: .endif
1835:
1836: bCONT: bne RetA870
1837: ldx #ErrCantContinue
1838: ldy zOLDTXT + 1
1839: bne @LA862
1840: jmp bERROR
1841:
1842: @LA862:
1843: lda zOLDTXT
1844: sta zTXTPTR
1845: sty zTXTPTR + 1
1846: lda zOLDLIN
1847: ldy zOLDLIN + 1
1848: sta zCURLIN
1849: sty zCURLIN + 1
1850: RetA870:
1851: rts
1852:
1853: bRUN: php
1854: lda #0
1855: jsr kSETMSG
1856: plp
1857: bne @LA87D
1858: jmp LA659
1859:
1860: @LA87D:
1861: jsr LA660
1862: jmp LA897
1863:
1864: bGOSUB: lda #3
1865: jsr bGETSTK
1866: lda zTXTPTR + 1
1867: pha
1868: lda zTXTPTR
1869: pha
1870: lda zCURLIN + 1
1871: pha
1872: lda zCURLIN
1873: pha
1874: lda #TokGosub
1875: pha
1876:
1877: LA897: jsr zCHRGOT
1878: jsr bGOTO
1879: jmp bNEWSTT
1880:
1881: bGOTO: jsr bLINGET
1882: jsr LA909
1883: sec
1884: lda zCURLIN
1885: sbc zLINNUM
1886: lda zCURLIN + 1
1887: sbc zLINNUM + 1
1888: bcs @LA8BC
1889: tya
1890: sec
1891: adc zTXTPTR
1892: ldx zTXTPTR + 1
1893: bcc @LA8C0
1894: inx
1895: bcs @LA8C0
1896: @LA8BC:
1897: lda zTXTTAB
1898: ldx zTXTTAB + 1
1899: @LA8C0:
1900: jsr LA617
1901: bcc LA8E3
1902: lda zTEMP_5F
1903: sbc #<1
1904: sta zTXTPTR
1905: lda zTEMP_5F + 1
1906: sbc #>0
1907: sta zTXTPTR + 1
1908: RetA8D1:
1909: rts
1910:
1911: bRETURN:bne RetA8D1
1912: lda #-1
1913: sta zFORPNT + 1
1914: jsr bFNDFOR
1915: txs
1916: cmp #TokGosub
1917: beq LA8EB
1918: ldx #ErrReturnWithoutGosub
1919: .byte ASM_BIT3
1920: LA8E3: ldx #ErrUndefinedStatement
1921: jmp bERROR
1922: LA8E8: jmp bSYNERR
1923: LA8EB: pla
1924: pla
1925: sta zCURLIN
1926: pla
1927: sta zCURLIN + 1
1928: pla
1929: sta zTXTPTR
1930: pla
1931: sta zTXTPTR + 1
1932:
1933: bDATA: jsr bDATAN
1934: LA8FB: tya
1935:
1936: JDLA8FC:
1937: clc
1938: adc zTXTPTR
1939: sta zTXTPTR
1940: bcc RetA905
1941: inc zTXTPTR + 1
1942: RetA905:
1943: rts
1944:
1945: bDATAN: ldx #':'
1946: .byte ASM_BIT3
1947: LA909: ldx #0
1948: stx zCHARAC
1949: ldy #0
1950: sty zENDCHR
1951: LA911:
1952: lda zENDCHR
1953: ldx zCHARAC
1954: sta zCHARAC
1955: JDLA917:
1956: stx zENDCHR
1957: @LA919:
1958: lda (zTXTPTR),y
1959: beq RetA905
1960: cmp zENDCHR
1961: beq RetA905
1962: iny
1963: cmp #'"'
1964: bne @LA919
1965: beq LA911
1966:
1967:
1968: bIF: jsr bFRMEVL
1969: jsr zCHRGOT
1970: cmp #TokGoto
1971: beq @LA937
1972: lda #TokThen
1973: jsr LAEFF
1974: @LA937:
1975: lda zFACEXP
1976: bne LA940
1977:
1978: bREM: jsr LA909
1979: beq LA8FB
1980: LA940: jsr zCHRGOT
1981: bcs @LA948
1982: jmp bGOTO
1983:
1984: @LA948:
1985: jmp bGONE3
1986:
1987: bONGOTO:jsr LB79E
1988: pha
1989: cmp #TokGosub
1990: beq LA957
1991: LA953: cmp #TokGoto
1992: bne LA8E8
1993: LA957: dec zFACHO + 3
1994: bne @LA95F
1995: pla
1996: jmp LA7EF
1997: @LA95F:
1998: jsr zCHRGET
1999: jsr bLINGET
2000: cmp #','
2001: beq LA957
2002: pla
2003: RetA96A:
2004: rts
2005:
2006: bLINGET:ldx #0
2007: stx zLINNUM
2008: stx zLINNUM + 1
2009: @LA971:
2010: bcs RetA96A
2011: sbc #'0' - 1
2012: sta zCHARAC
2013: lda zLINNUM + 1
2014: sta zINDEX
2015: cmp #>6400
2016: bcs LA953
2017: lda zLINNUM
2018: asl a
2019: rol zINDEX
2020: asl a
2021: rol zINDEX
2022: adc zLINNUM
2023: sta zLINNUM
2024: lda zINDEX
2025: adc zLINNUM + 1
2026: sta zLINNUM + 1
2027: asl zLINNUM
2028: rol zLINNUM + 1
2029: lda zLINNUM
2030: adc zCHARAC
2031: sta zLINNUM
2032: bcc @LA99F
2033: inc zLINNUM + 1
2034: @LA99F:
2035: jsr zCHRGET
2036: jmp @LA971
2037:
2038: bLET: jsr bPTRGET
2039: sta zFORPNT
2040: sty zFORPNT + 1
2041: lda #TokEqual
2042: jsr LAEFF
2043: lda zINTFLG
2044: pha
2045: lda zVALTYP
2046: pha
2047: jsr bFRMEVL
2048: pla
2049: rol a
2050: jsr LAD90
2051: bne bPUTSTR
2052: pla
2053: LA9C2: bpl bPTFLPT
2054:
2055: bPUTINT:jsr bROUND
2056: jsr bAYINT
2057: ldy #0
2058: lda zFACHO + 2
2059: sta (zFORPNT),y
2060: iny
2061: lda zFACHO + 3
2062: sta (zFORPNT),y
2063: rts
2064: bPTFLPT:jmp LBBD0
2065:
2066: bPUTSTR:pla
2067: LA9DA: ldy zFORPNT + 1
2068: cpy #>bTI
2069: bne bGETSPT
2070: jsr LB6A6
2071: bPUTTIM:cmp #6
2072: bne @LAA24
2073: ldy #0
2074: sty zFACEXP
2075: sty zFACSGN
2076: @LA9ED:
2077: sty zFBUFPT
2078: jsr @LAA1D
2079: jsr bMUL10
2080: inc zFBUFPT
2081: ldy zFBUFPT
2082: jsr @LAA1D
2083: jsr bMOVAF
2084: tax
2085: beq @LAA07
2086: inx
2087: txa
2088: jsr LBAED
2089: @LAA07:
2090: ldy zFBUFPT
2091: iny
2092: cpy #6
2093: bne @LA9ED
2094: jsr bMUL10
2095: jsr bQINT
2096: ldx zFACHO + 2
2097: ldy zFACHO + 1
2098: lda zFACHO + 3
2099: jmp kSETTIM
2100:
2101: @LAA1D:
2102: lda (zINDEX),y
2103: jsr zCHRGOT_SPACE
2104: bcc @LAA27
2105: @LAA24:
2106: jmp bIQERR
2107:
2108: @LAA27:
2109: sbc #'0' - 1
2110: jmp LBD7E
2111:
2112: bGETSPT:ldy #2
2113: lda (zFACHO + 2),y
2114: cmp zFRETOP + 1
2115: bcc @LAA4B
2116: bne @LAA3D
2117: dey
2118: lda (zFACHO + 2),y
2119: cmp zFRETOP
2120: bcc @LAA4B
2121: @LAA3D:
2122: ldy zFACHO + 3
2123: cpy zVARTAB + 1
2124: bcc @LAA4B
2125: bne @LAA52
2126: lda zFACHO + 2
2127: cmp zVARTAB
2128: bcs @LAA52
2129: @LAA4B:
2130: lda zFACHO + 2
2131: ldy zFACHO + 3
2132: jmp @LAA68
2133:
2134: @LAA52:
2135: ldy #0
2136: lda (zFACHO + 2),y
2137: jsr LB475
2138: lda zTEMP_50
2139: ldy zTEMP_50 + 1
2140: sta zARISGN
2141: sty zFACOV
2142: jsr bMOVINS
2143: lda #<zFAC
2144: ldy #>zFAC
2145: @LAA68:
2146: sta zTEMP_50
2147: sty zTEMP_50 + 1
2148: jsr bFREFAC
2149: ldy #0
2150: lda (zTEMP_50),y
2151: sta (zFORPNT),y
2152: iny
2153: lda (zTEMP_50),y
2154: sta (zFORPNT),y
2155: iny
2156: lda (zTEMP_50),y
2157: sta (zFORPNT),y
2158: rts
2159:
2160: bPRINTN:jsr bCMD
2161: jmp LABB5
2162:
2163: bCMD: jsr LB79E
2164: beq @LAA90
2165: lda #','
2166: jsr LAEFF
2167: @LAA90:
2168: php
2169: stx z13
2170: jsr bCKOUT
2171: plp
2172: jmp bPRINT
2173:
2174: bSTRDON:jsr LAB21
2175:
2176: LAA9D: jsr zCHRGOT
2177:
2178: bPRINT: beq bCRDO
2179: LAAA2: beq RetAAE7
2180: cmp #TokTab
2181: beq LAAF8
2182: cmp #TokSpc
2183: clc
2184: beq LAAF8
2185: cmp #','
2186: beq bCOMPRT
2187: cmp #';'
2188: beq LAB13
2189: jsr bFRMEVL
2190: bVAROP: bit zVALTYP
2191: bmi bSTRDON
2192: jsr bFOUT
2193: jsr bSTRLIT
2194: jsr LAB21
2195: jsr bOUTSPC
2196: bne LAA9D
2197: bSTREND:lda #0
2198: sta lBUF,x
2199: ldx #<(lBUF - 1)
2200: ldy #>(lBUF - 1)
2201: lda z13
2202: bne RetAAE7
2203:
2204:
2205:
2206:
2207:
2208:
2209:
2210:
2211:
2212:
2213: bCRDO: lda #ASC_CR
2214: jsr LAB47
2215: bit z13
2216: bpl LAAE5
2217: lda #ASC_LF
2218: jsr LAB47
2219: LAAE5: eor #$FF
2220: RetAAE7:
2221: rts
2222:
2223: bCOMPRT:sec
2224: jsr kPLOT
2225: tya
2226: sec
2227: @LAAEE:
2228: sbc #EDITOR_TAB
2229: bcs @LAAEE
2230: eor #$FF
2231: adc #$01
2232: bne LAB0E
2233: LAAF8: php
2234: sec
2235: jsr kPLOT
2236: sty zTRMPOS
2237: jsr bGTBYTC
2238: cmp #')'
2239: bne LAB5F
2240: plp
2241: bcc LAB0F
2242: txa
2243: sbc zTRMPOS
2244: bcc LAB13
2245: LAB0E: tax
2246: LAB0F: inx
2247: LAB10: dex
2248: bne LAB19
2249: LAB13: jsr zCHRGET
2250: jmp LAAA2
2251:
2252: LAB19: jsr bOUTSPC
2253: bne LAB10
2254:
2255: bSTROUT:jsr bSTRLIT
2256:
2257: LAB21: jsr LB6A6
2258: tax
2259: ldy #0
2260: inx
2261: @LAB28:
2262: dex
2263: beq RetAAE7
2264: lda (zINDEX),y
2265: jsr LAB47
2266: iny
2267: cmp #ASC_CR
2268: bne @LAB28
2269: jsr LAAE5
2270: jmp @LAB28
2271:
2272: bOUTSPC:lda z13
2273: beq @LAB42
2274: lda #' '
2275: .byte ASM_BIT3
2276: @LAB42:
2277: lda #ASC_CURSORLEFTRIGHT
2278: .byte ASM_BIT3
2279:
2280:
2281: LAB45: lda #'?'
2282:
2283: LAB47: jsr bCHOUT
2284: and #$FF
2285: rts
2286:
2287: bDOAGIN:lda zSUBFLG
2288: beq LAB62
2289: bmi @LAB57
2290: ldy #$FF
2291: bne @LAB5B
2292:
2293: @LAB57:
2294: lda zDATLIN
2295: ldy zDATLIN + 1
2296: @LAB5B:
2297: sta zCURLIN
2298: sty zCURLIN + 1
2299: LAB5F: jmp bSYNERR
2300: LAB62: lda z13
2301: beq @LAB6B
2302: ldx #ErrFileData
2303: jmp bERROR
2304:
2305: @LAB6B:
2306: lda #<StrRedoFromStart
2307: ldy #>StrRedoFromStart
2308: jsr bSTROUT
2309: lda zOLDTXT
2310: ldy zOLDTXT + 1
2311: sta zTXTPTR
2312: sty zTXTPTR + 1
2313: rts
2314:
2315: bGET: jsr bERRDIR
2316: cmp #'#'
2317: bne @LAB92
2318: jsr zCHRGET
2319: jsr LB79E
2320: lda #','
2321: jsr LAEFF
2322: stx z13
2323: jsr bCKIN
2324: @LAB92:
2325: ldx #<(lBUF + 1)
2326: ldy #>(lBUF + 1)
2327: lda #0
2328: sta lBUF + 1
2329: lda #$40
2330: jsr LAC0F
2331: ldx z13
2332: bne LABB7
2333: rts
2334:
2335: bINPUTN:jsr LB79E
2336: lda #','
2337: jsr LAEFF
2338: stx z13
2339: jsr bCKIN
2340: jsr LABCE
2341: LABB5: lda z13
2342: LABB7: jsr kCLRCHN
2343: ldx #0
2344: stx z13
2345: rts
2346: bINPUT: cmp #'"'
2347: bne LABCE
2348: jsr LAEBD
2349: lda #';'
2350: jsr LAEFF
2351: jsr LAB21
2352: LABCE: jsr bERRDIR
2353: lda #','
2354: sta lBUF - 1
2355: LABD6: jsr bQINLIN
2356: lda z13
2357: beq bBUFFUL
2358: jsr kREADST
2359: and #$02
2360: beq bBUFFUL
2361: jsr LABB5
2362: jmp bDATA
2363:
2364: bBUFFUL:lda lBUF
2365: bne LAC0D
2366: lda z13
2367: bne LABD6
2368: jsr bDATAN
2369: jmp LA8FB
2370:
2371: bQINLIN:lda z13
2372: bne @LAC03
2373: jsr LAB45
2374: jsr bOUTSPC
2375: @LAC03:
2376: jmp bINLIN
2377:
2378: bREAD: ldx zDATPTR
2379: ldy zDATPTR + 1
2380: lda #$98
2381: .byte ASM_BIT3
2382: LAC0D: lda #0
2383: LAC0F: sta zSUBFLG
2384: stx zINPPTR
2385: sty zINPPTR + 1
2386: LAC15: jsr bPTRGET
2387: sta zFORPNT
2388: sty zFORPNT + 1
2389: lda zTXTPTR
2390: ldy zTXTPTR + 1
2391: sta zVARTXT
2392: sty zVARTXT + 1
2393: ldx zINPPTR
2394: ldy zINPPTR + 1
2395: stx zTXTPTR
2396: sty zTXTPTR + 1
2397: jsr zCHRGOT
2398: bne LAC51
2399: bit zSUBFLG
2400: bvc LAC41
2401:
2402: bRGDET: jsr bGETIN
2403: sta lBUF
2404: ldx #<(lBUF - 1)
2405: ldy #>(lBUF - 1)
2406: bne LAC4D
2407: LAC41: bmi LACB8
2408: lda z13
2409: bne @LAC4A
2410: jsr LAB45
2411: @LAC4A:
2412: jsr bQINLIN
2413:
2414: LAC4D: stx zTXTPTR
2415: sty zTXTPTR + 1
2416: LAC51: jsr zCHRGET
2417: bit zVALTYP
2418: bpl @LAC89
2419: bit zSUBFLG
2420: bvc @LAC65
2421: inx
2422: stx zTXTPTR
2423: lda #0
2424: sta zCHARAC
2425: beq @LAC71
2426: @LAC65:
2427: sta zCHARAC
2428: cmp #'"'
2429: beq @LAC72
2430: lda #':'
2431: sta zCHARAC
2432: lda #','
2433: @LAC71:
2434: clc
2435: @LAC72:
2436: sta zENDCHR
2437: lda zTXTPTR
2438: ldy zTXTPTR + 1
2439: adc #0
2440: bcc @LAC7D
2441: iny
2442: @LAC7D:
2443: jsr LB48D
2444: jsr LB7E2
2445: jsr LA9DA
2446: jmp @LAC91
2447: @LAC89:
2448: jsr bFIN
2449: lda zINTFLG
2450: jsr LA9C2
2451: @LAC91:
2452: jsr zCHRGOT
2453: beq @LAC9D
2454: cmp #','
2455: beq @LAC9D
2456: jmp bDOAGIN
2457:
2458: @LAC9D:
2459: lda zTXTPTR
2460: ldy zTXTPTR + 1
2461: sta zINPPTR
2462: sty zINPPTR + 1
2463: lda zVARTXT
2464: ldy zVARTXT + 1
2465: sta zTXTPTR
2466: sty zTXTPTR + 1
2467: jsr zCHRGOT
2468: beq LACDF
2469: jsr bCHKCMA
2470: jmp LAC15
2471: LACB8: jsr bDATAN
2472: iny
2473: tax
2474: bne @LACD1
2475: ldx #$0D
2476: iny
2477: lda (zTXTPTR),y
2478: beq LAD32
2479: iny
2480: lda (zTXTPTR),y
2481: sta zDATLIN
2482: iny
2483: lda (zTXTPTR),y
2484: iny
2485: sta zDATLIN + 1
2486: @LACD1:
2487: jsr LA8FB
2488: jsr zCHRGOT
2489: tax
2490: cpx #$83
2491: bne LACB8
2492: jmp LAC51
2493: LACDF: lda zINPPTR
2494: ldy zINPPTR + 1
2495: ldx zSUBFLG
2496: bpl @LACEA
2497: jmp LA827
2498: @LACEA:
2499: ldy #0
2500: lda (zINPPTR),y
2501: beq @Ret
2502: lda z13
2503: bne @Ret
2504: lda #<bEXINT
2505: ldy #>bEXINT
2506: jmp bSTROUT
2507: @Ret: rts
2508:
2509: bEXINT: .byte "?EXTRA IGNORED",$0D,$00
2510:
2511: StrRedoFromStart:
2512: .byte "?REDO FROM START",$0D,$00
2513:
2514: bNEXT: bne LAD24
2515: ldy #0
2516: beq LAD27
2517: LAD24: jsr bPTRGET
2518: LAD27: sta zFORPNT
2519: sty zFORPNT + 1
2520: jsr bFNDFOR
2521: beq LAD35
2522: ldx #ErrNextWithoutFor
2523: LAD32: jmp bERROR
2524: LAD35: txs
2525: txa
2526: clc
2527: adc #$04
2528: pha
2529: adc #$06
2530: sta zINDEX2
2531: pla
2532: ldy #$01
2533: jsr bMOVFM
2534: tsx
2535: lda lSTACK + 9,x
2536: sta zFACSGN
2537: lda zFORPNT
2538: ldy zFORPNT + 1
2539: jsr bFADD
2540: jsr LBBD0
2541: ldy #$01
2542: jsr LBC5D
2543: tsx
2544: sec
2545: sbc lSTACK + 9,x
2546: beq LAD78
2547: bDONEXT:lda lSTACK + 15,x
2548: sta zCURLIN
2549: lda lSTACK + 16,x
2550: sta zCURLIN + 1
2551: lda lSTACK + 18,x
2552: sta zTXTPTR
2553: lda lSTACK + 17,x
2554: sta zTXTPTR + 1
2555: LAD75: jmp bNEWSTT
2556: LAD78: txa
2557: adc #17
2558: tax
2559: txs
2560: jsr zCHRGOT
2561: cmp #','
2562: bne LAD75
2563: jsr zCHRGET
2564: jsr LAD24
2565: bFRMNUM:jsr bFRMEVL
2566: LAD8D: clc
2567: .byte ASM_BIT2
2568: LAD8F: sec
2569: LAD90: bit zVALTYP
2570: bmi LAD97
2571: bcs LAD99
2572: LAD96: rts
2573: LAD97: bcs LAD96
2574: LAD99: ldx #ErrTypeMismatch
2575: jmp bERROR
2576: bFRMEVL:ldx zTXTPTR
2577: bne LADA4
2578: dec zTXTPTR + 1
2579: LADA4: dec zTXTPTR
2580: ldx #0
2581: .byte ASM_BIT2
2582: LADA9: pha
2583: txa
2584: pha
2585: lda #1
2586: jsr bGETSTK
2587: jsr bEVAL
2588: lda #$00
2589: sta zOPMASK
2590: LADB8: jsr zCHRGOT
2591: LADBB: sec
2592: sbc #TokGreater
2593: bcc LADD7
2594: cmp #TokSgn - TokGreater
2595: bcs LADD7
2596: cmp #TokEqual - TokGreater
2597: rol a
2598: eor #$01
2599: eor zOPMASK
2600: cmp zOPMASK
2601: bcc LAE30
2602: sta zOPMASK
2603: jsr zCHRGET
2604: jmp LADBB
2605: LADD7: ldx zOPMASK
2606: bne LAE07
2607: bcs LAE58
2608: adc #$07
2609: bcc LAE58
2610: adc zVALTYP
2611: bne LADE8
2612: jmp bCAT
2613: LADE8: adc #-1
2614: sta zINDEX
2615: asl a
2616: adc zINDEX
2617: tay
2618: LADF0: pla
2619: cmp bOPTAB,y
2620: bcs LAE5D
2621: jsr LAD8D
2622: LADF9: pha
2623: LADFA: jsr LAE20
2624: pla
2625: ldy zVARTXT
2626: bpl LAE19
2627: tax
2628: beq LAE5B
2629: bne LAE66
2630: LAE07: lsr zVALTYP
2631: txa
2632: rol a
2633: ldx zTXTPTR
2634: bne LAE11
2635: dec zTXTPTR + 1
2636: LAE11: dec zTXTPTR
2637: ldy #$1B
2638: sta zOPMASK
2639: bne LADF0
2640: LAE19: cmp bOPTAB,y
2641: bcs LAE66
2642: bcc LADF9
2643: LAE20: lda bOPTAB + 2,y
2644: pha
2645: lda bOPTAB + 1,y
2646: pha
2647: jsr LAE33
2648: lda zOPMASK
2649: jmp LADA9
2650: LAE30: jmp bSYNERR
2651: LAE33: lda zFACSGN
2652: ldx bOPTAB,y
2653: LAE38: tay
2654: pla
2655: sta zINDEX
2656: inc zINDEX
2657: pla
2658: sta zINDEX + 1
2659: tya
2660: pha
2661: LAE43: jsr bROUND
2662: lda zFACHO + 3
2663: pha
2664: lda zFACHO + 2
2665: pha
2666: lda zFACHO + 1
2667: pha
2668: lda zFACHO
2669: pha
2670: lda zFACEXP
2671: pha
2672: jmp (zINDEX)
2673: LAE58: ldy #$FF
2674: pla
2675: LAE5B: beq LAE80
2676: LAE5D: cmp #$64
2677: beq LAE64
2678: jsr LAD8D
2679: LAE64: sty zVARTXT
2680: LAE66: pla
2681: lsr a
2682: sta zTANSGN
2683: pla
2684: sta zARGEXP
2685: pla
2686: sta zARGHO
2687: pla
2688: sta zARGHO + 1
2689: pla
2690: sta zARGHO + 2
2691: pla
2692: sta zARGHO + 3
2693: pla
2694: sta zARGSGN
2695: eor zFACSGN
2696: sta zARISGN
2697: LAE80: lda zFACEXP
2698: rts
2699: bEVAL: jmp (lIEVAL)
2700: LAE86: lda #$00
2701: sta zVALTYP
2702: LAE8A: jsr zCHRGET
2703: bcs LAE92
2704: LAE8F: jmp bFIN
2705: LAE92: jsr bISLETC
2706: bcc LAE9A
2707: jmp bISVAR
2708: LAE9A: cmp #$FF
2709: bne bQDOT
2710: lda #<bPIVAL
2711: ldy #>bPIVAL
2712: jsr bMOVFM
2713: jmp zCHRGET
2714:
2715: bPIVAL: .byte $82,$49,$0F,$DA,$A1
2716:
2717: bQDOT: cmp #'.'
2718: beq LAE8F
2719: cmp #TokMinus
2720: beq bDOMIN
2721: cmp #TokPlus
2722: beq LAE8A
2723: cmp #'"'
2724: bne LAECC
2725: LAEBD: lda zTXTPTR
2726: ldy zTXTPTR + 1
2727: adc #0
2728: bcc LAEC6
2729: iny
2730: LAEC6: jsr bSTRLIT
2731: jmp LB7E2
2732: LAECC: cmp #TokNot
2733: bne LAEE3
2734: ldy #$18
2735: bne LAF0F
2736: bEQUOP: jsr bAYINT
2737: lda zFACHO + 3
2738: eor #$FF
2739: tay
2740: lda zFACHO + 2
2741: eor #$FF
2742: jmp bGIVAYF
2743: LAEE3: cmp #TokFn
2744: bne LAEEA
2745: jmp bFNDOER
2746: LAEEA: cmp #TokSgn
2747: bcc bOARCHK
2748: jmp bISFUN
2749: bOARCHK:jsr bCHKopen
2750: jsr bFRMEVL
2751: bCHKclose:
2752: lda #')'
2753: .byte ASM_BIT3
2754: bCHKopen:
2755: lda #'('
2756: .byte ASM_BIT3
2757: bCHKCMA:lda #','
2758: LAEFF: ldy #0
2759: cmp (zTXTPTR),y
2760: bne bSYNERR
2761: jmp zCHRGET
2762: bSYNERR:ldx #ErrSyntax
2763: jmp bERROR
2764: bDOMIN: ldy #$15
2765: LAF0F: pla
2766: pla
2767: jmp LADFA
2768: bRSVVAR:sec
2769: lda zFACHO + 2
2770: sbc #<BASIC_START
2771: lda zFACHO + 3
2772: sbc #>BASIC_START
2773: bcc LAF27
2774: lda #<BASIC_END
2775: sbc zFACHO + 2
2776: lda #>BASIC_END
2777: sbc zFACHO + 3
2778: LAF27: rts
2779: bISVAR: jsr bPTRGET
2780: sta zFACHO + 2
2781: sty zFACHO + 3
2782: ldx zVARNAM
2783: ldy zVARNAM + 1
2784: lda zVALTYP
2785: beq LAF5D
2786: lda #0
2787: sta zFACOV
2788: jsr bRSVVAR
2789: bcc LAF5C
2790: cpx #'T'
2791: bne LAF5C
2792: cpy #'I' + $80
2793: bne LAF5C
2794: bTISASC:jsr LAF84
2795: sty zTEMP_5E
2796: dey
2797: sty zFBUFPT
2798: ldy #6
2799: sty zTEMP_5D
2800: ldy #$24
2801: jsr bFOUTIM
2802: jmp LB46F
2803: LAF5C: rts
2804: LAF5D: bit zINTFLG
2805: bpl LAF6E
2806: ldy #0
2807: lda (zFACHO + 2),y
2808: tax
2809: iny
2810: lda (zFACHO + 2),y
2811: tay
2812: txa
2813: jmp bGIVAYF
2814: LAF6E: jsr bRSVVAR
2815: bcc LAFA0
2816: cpx #'T'
2817: bne LAF92
2818: cpy #'I'
2819: bne LAFA0
2820: jsr LAF84
2821: tya
2822: ldx #$A0
2823: jmp LBC4F
2824: LAF84: jsr kRDTIM
2825: stx zFACHO + 2
2826: sty zFACHO + 1
2827: sta zFACHO + 3
2828: ldy #0
2829: sty zFACHO
2830: rts
2831: LAF92: cpx #'S'
2832: bne LAFA0
2833: cpy #'T'
2834: bne LAFA0
2835: jsr kREADST
2836: jmp LBC3C
2837: LAFA0: lda zFACHO + 2
2838: ldy zFACHO + 3
2839: jmp bMOVFM
2840: bISFUN: asl a
2841: pha
2842: tax
2843: jsr zCHRGET
2844: cpx #TokRem
2845: bcc bNUMFUN
2846: bSTRFUN:jsr bCHKopen
2847: jsr bFRMEVL
2848: jsr bCHKCMA
2849: jsr LAD8F
2850: pla
2851: tax
2852: lda zFACHO + 3
2853: pha
2854: lda zFACHO + 2
2855: pha
2856: txa
2857: pha
2858: jsr LB79E
2859: pla
2860: tay
2861: txa
2862: pha
2863: jmp LAFD6
2864: bNUMFUN:jsr bOARCHK
2865: pla
2866: tay
2867: LAFD6: lda bFUNDSP - 2*(TokSgn - $80),y
2868: sta zJMPER + 1
2869: lda bFUNDSP - 2*(TokSgn - $80) + 1,y
2870: sta zJMPER + 2
2871: jsr zJMPER
2872: jmp LAD8D
2873: bOROP: ldy #$FF
2874: .byte ASM_BIT3
2875: TAND: ldy #0
2876: sty zCOUNT
2877: jsr bAYINT
2878: lda zFACHO + 2
2879: eor zCOUNT
2880: sta zCHARAC
2881: lda zFACHO + 3
2882: eor zCOUNT
2883: sta zENDCHR
2884: jsr bMOVFA
2885: jsr bAYINT
2886: lda zFACHO + 3
2887: eor zCOUNT
2888: and zENDCHR
2889: eor zCOUNT
2890: tay
2891: lda zFACHO + 2
2892: eor zCOUNT
2893: and zCHARAC
2894: eor zCOUNT
2895: jmp bGIVAYF
2896: bDOREL: jsr LAD90
2897: bcs bSTRREL
2898: bNUMREL:lda zARGSGN
2899: ora #$7F
2900: and zARGHO
2901: sta zARGHO
2902: lda #<zARG
2903: ldy #>zARG
2904: jsr bFCOMP
2905: tax
2906: jmp LB061
2907: bSTRREL:lda #0
2908: sta zVALTYP
2909: dec zOPMASK
2910: jsr LB6A6
2911: sta zFACEXP
2912: stx zFACHO
2913: sty zFACHO + 1
2914: lda zARGHO + 2
2915: ldy zARGHO + 3
2916: jsr LB6AA
2917: stx zARGHO + 2
2918: sty zARGHO + 3
2919: tax
2920: sec
2921: sbc zFACEXP
2922: beq LB056
2923: lda #1
2924: bcc LB056
2925: ldx zFACEXP
2926: lda #$FF
2927: LB056: sta zFACSGN
2928: ldy #$FF
2929: inx
2930: LB05B: iny
2931: dex
2932: bne LB066
2933: ldx zFACSGN
2934: LB061: bmi LB072
2935: clc
2936: bcc LB072
2937: LB066: lda (zARGHO + 2),y
2938: cmp (zFACHO),y
2939: beq LB05B
2940: ldx #$FF
2941: bcs LB072
2942: ldx #$01
2943: LB072: inx
2944: txa
2945: rol a
2946: and zTANSGN
2947: beq LB07B
2948: lda #$FF
2949: LB07B: jmp LBC3C
2950: bDIM: jsr bCHKCMA
2951: bDIM2: tax
2952: jsr LB090
2953: jsr zCHRGOT
2954: bne bDIM
2955: rts
2956: bPTRGET:ldx #$00
2957: jsr zCHRGOT
2958: LB090: stx zDIMFLG
2959: LB092: sta zVARNAM
2960: jsr zCHRGOT
2961: jsr bISLETC
2962: bcs LB09F
2963: LB09C: jmp bSYNERR
2964: LB09F: ldx #$00
2965: stx zVALTYP
2966: stx zINTFLG
2967: jsr zCHRGET
2968: bcc LB0AF
2969: jsr bISLETC
2970: bcc LB0BA
2971: LB0AF: tax
2972: LB0B0: jsr zCHRGET
2973: bcc LB0B0
2974: jsr bISLETC
2975: bcs LB0B0
2976: LB0BA: cmp #'$'
2977: bne LB0C4
2978: lda #$FF
2979: sta zVALTYP
2980: bne LB0D4
2981: LB0C4: cmp #'%'
2982: bne LB0DB
2983: lda zINTALLOWED
2984: bne LB09C
2985: lda #$80
2986: sta zINTFLG
2987: ora zVARNAM
2988: sta zVARNAM
2989: LB0D4: txa
2990: ora #$80
2991: tax
2992: jsr zCHRGET
2993: LB0DB: stx zVARNAM + 1
2994: sec
2995: ora zINTALLOWED
2996: sbc #'('
2997: bne bORDVAR
2998: jmp bISARY
2999: bORDVAR:ldy #$00
3000: sty zINTALLOWED
3001: lda zVARTAB
3002: ldx zVARTAB + 1
3003: LB0EF: stx zTEMP_5F + 1
3004: LB0F1: sta zTEMP_5F
3005: cpx zARYTAB + 1
3006: bne LB0FB
3007: cmp zARYTAB
3008: beq bNOTFNS
3009: LB0FB: lda zVARNAM
3010: cmp (zTEMP_5F),y
3011: bne LB109
3012: lda zVARNAM + 1
3013: iny
3014: cmp (zTEMP_5F),y
3015: beq LB185
3016: dey
3017: LB109: clc
3018: lda zTEMP_5F
3019: adc #7
3020: bcc LB0F1
3021: inx
3022: bne LB0EF
3023: bISLETC:cmp #'A'
3024: bcc LB11C
3025: sbc #'Z' + 1
3026: sec
3027: sbc #-('Z' + 1)
3028: LB11C: rts
3029: bNOTFNS:pla
3030: pha
3031: cmp #$2A
3032: bne bNOTEVL
3033: LB123: lda #<bTI
3034: ldy #>bTI
3035: rts
3036: bNOTEVL:lda zVARNAM
3037: ldy zVARNAM + 1
3038: cmp #'T'
3039: bne LB13B
3040: cpy #'I' + $80
3041: beq LB123
3042: cpy #'I'
3043: bne LB13B
3044: LB138: jmp bSYNERR
3045: LB13B: cmp #'S'
3046: bne LB143
3047: cpy #'T'
3048: beq LB138
3049: LB143: lda zARYTAB
3050: ldy zARYTAB + 1
3051: sta zTEMP_5F
3052: sty zTEMP_5F + 1
3053: lda zSTREND
3054: ldy zSTREND + 1
3055: sta zTEMP_5A
3056: sty zTEMP_5A + 1
3057: clc
3058: adc #7
3059: bcc LB159
3060: iny
3061: LB159: sta zTEMP_58
3062: sty zTEMP_58 + 1
3063: jsr bBLTU
3064: lda zTEMP_58
3065: ldy zTEMP_58 + 1
3066: iny
3067: sta zARYTAB
3068: sty zARYTAB + 1
3069: ldy #0
3070: lda zVARNAM
3071: sta (zTEMP_5F),y
3072: iny
3073: lda zVARNAM + 1
3074: sta (zTEMP_5F),y
3075: lda #0
3076: iny
3077: sta (zTEMP_5F),y
3078: iny
3079: sta (zTEMP_5F),y
3080: iny
3081: sta (zTEMP_5F),y
3082: iny
3083: sta (zTEMP_5F),y
3084: iny
3085: sta (zTEMP_5F),y
3086: LB185: lda zTEMP_5F
3087: clc
3088: adc #2
3089: ldy zTEMP_5F + 1
3090: bcc LB18F
3091: iny
3092: LB18F: sta zVARPNT
3093: sty zVARPNT + 1
3094: rts
3095: bARYGET:lda zCOUNT
3096: asl a
3097: adc #5
3098: adc zTEMP_5F
3099: ldy zTEMP_5F + 1
3100: bcc LB1A0
3101: iny
3102: LB1A0: sta zTEMP_58
3103: sty zTEMP_58 + 1
3104: rts
3105:
3106: bN32768:.byte $90,$80,$00,$00,$00
3107:
3108: bFACINX:jsr bAYINT
3109: lda zFACHO + 2
3110: ldy zFACHO + 3
3111: rts
3112: bINTIDX:jsr zCHRGET
3113: jsr bFRMEVL
3114: LB1B8: jsr LAD8D
3115: lda zFACSGN
3116: bmi LB1CC
3117: bAYINT: lda zFACEXP
3118: cmp #$90
3119: bcc LB1CE
3120: lda #<bN32768
3121: ldy #>bN32768
3122: jsr bFCOMP
3123: LB1CC: bne bIQERR
3124: LB1CE: jmp bQINT
3125: bISARY: lda zDIMFLG
3126: ora zINTFLG
3127: pha
3128: lda zVALTYP
3129: pha
3130: ldy #0
3131: LB1DB: tya
3132: pha
3133: lda zVARNAM + 1
3134: pha
3135: lda zVARNAM
3136: pha
3137: jsr bINTIDX
3138: pla
3139: sta zVARNAM
3140: pla
3141: sta zVARNAM + 1
3142: pla
3143: tay
3144: tsx
3145: lda lSTACK + 2,x
3146: pha
3147: lda lSTACK + 1,x
3148: pha
3149: lda zFACHO + 2
3150: sta lSTACK + 2,x
3151: lda zFACHO + 3
3152: sta lSTACK + 1,x
3153: iny
3154: jsr zCHRGOT
3155: cmp #','
3156: beq LB1DB
3157: sty zCOUNT
3158: jsr bCHKclose
3159: pla
3160: sta zVALTYP
3161: pla
3162: sta zINTFLG
3163: and #$7F
3164: sta zDIMFLG
3165: bFNDARY:ldx zARYTAB
3166: lda zARYTAB + 1
3167: LB21C: stx zTEMP_5F
3168: sta zTEMP_5F + 1
3169: cmp zSTREND + 1
3170: bne LB228
3171: cpx zSTREND
3172: beq bNOTFDD
3173: LB228: ldy #0
3174: lda (zTEMP_5F),y
3175: iny
3176: cmp zVARNAM
3177: bne LB237
3178: lda zVARNAM + 1
3179: cmp (zTEMP_5F),y
3180: beq bRAERR
3181: LB237: iny
3182: lda (zTEMP_5F),y
3183: clc
3184: adc zTEMP_5F
3185: tax
3186: iny
3187: lda (zTEMP_5F),y
3188: adc zTEMP_5F + 1
3189: bcc LB21C
3190: bBSERR: ldx #ErrBadSubscript
3191: .byte ASM_BIT3
3192: bIQERR: ldx #ErrIllegalQuantity
3193: LB24A: jmp bERROR
3194: bRAERR: ldx #ErrRedimdArray
3195: lda zDIMFLG
3196: bne LB24A
3197: jsr bARYGET
3198: lda zCOUNT
3199: ldy #4
3200: cmp (zTEMP_5F),y
3201: bne bBSERR
3202: jmp LB2EA
3203: bNOTFDD:jsr bARYGET
3204: jsr bREASON
3205: ldy #0
3206: sty zFBUFPT + 1
3207: ldx #5
3208: lda zVARNAM
3209: sta (zTEMP_5F),y
3210: bpl LB274
3211: dex
3212: LB274: iny
3213: lda zVARNAM + 1
3214: sta (zTEMP_5F),y
3215: bpl LB27D
3216: dex
3217: dex
3218: LB27D: stx zFBUFPT
3219: lda zCOUNT
3220: iny
3221: iny
3222: iny
3223: sta (zTEMP_5F),y
3224: LB286: ldx #11
3225: lda #0
3226: bit zDIMFLG
3227: bvc LB296
3228: pla
3229: clc
3230: adc #1
3231: tax
3232: pla
3233: adc #0
3234: LB296: iny
3235: sta (zTEMP_5F),y
3236: iny
3237: txa
3238: sta (zTEMP_5F),y
3239: jsr bUMULT
3240: stx zFBUFPT
3241: sta zFBUFPT + 1
3242: ldy zINDEX
3243: dec zCOUNT
3244: bne LB286
3245: adc zTEMP_58 + 1
3246: bcs LB30B
3247: sta zTEMP_58 + 1
3248: tay
3249: txa
3250: adc zTEMP_58
3251: bcc LB2B9
3252: iny
3253: beq LB30B
3254: LB2B9: jsr bREASON
3255: sta zSTREND
3256: sty zSTREND + 1
3257: lda #0
3258: inc zFBUFPT + 1
3259: ldy zFBUFPT
3260: beq LB2CD
3261: LB2C8: dey
3262: sta (zTEMP_58),y
3263: bne LB2C8
3264: LB2CD: dec zTEMP_58 + 1
3265: dec zFBUFPT + 1
3266: bne LB2C8
3267: inc zTEMP_58 + 1
3268: sec
3269: lda zSTREND
3270: sbc zTEMP_5F
3271: ldy #2
3272: sta (zTEMP_5F),y
3273: lda zSTREND + 1
3274: iny
3275: sbc zTEMP_5F + 1
3276: sta (zTEMP_5F),y
3277: lda zDIMFLG
3278: bne LB34B
3279: iny
3280: LB2EA: lda (zTEMP_5F),y
3281: sta zCOUNT
3282: lda #0
3283: sta zFBUFPT
3284: LB2F2: sta zFBUFPT + 1
3285: iny
3286: pla
3287: tax
3288: sta zFACHO + 2
3289: pla
3290: sta zFACHO + 3
3291: cmp (zTEMP_5F),y
3292: bcc bINLPN2
3293: bne LB308
3294: iny
3295: txa
3296: cmp (zTEMP_5F),y
3297: bcc LB30F
3298: LB308: jmp bBSERR
3299: LB30B: jmp bOMERR
3300:
3301: bINLPN2:iny
3302: LB30F: lda zFBUFPT + 1
3303: ora zFBUFPT
3304: clc
3305: beq LB320
3306: jsr bUMULT
3307: txa
3308: adc zFACHO + 2
3309: tax
3310: tya
3311: ldy zINDEX
3312: LB320: adc zFACHO + 3
3313: stx zFBUFPT
3314: dec zCOUNT
3315: bne LB2F2
3316: sta zFBUFPT + 1
3317: ldx #5
3318: lda zVARNAM
3319: bpl LB331
3320: dex
3321: LB331: lda zVARNAM + 1
3322: bpl LB337
3323: dex
3324: dex
3325: LB337: stx zTEMP_28
3326: lda #0
3327: jsr LB355
3328: txa
3329: adc zTEMP_58
3330: sta zVARPNT
3331: tya
3332: adc zTEMP_58 + 1
3333: sta zVARPNT + 1
3334: tay
3335: lda zVARPNT
3336: LB34B: rts
3337: bUMULT: sty zINDEX
3338: lda (zTEMP_5F),y
3339: sta zTEMP_28
3340: dey
3341: lda (zTEMP_5F),y
3342: LB355: sta zTEMP_28 + 1
3343: lda #$10
3344: sta zTEMP_5D
3345: ldx #0
3346: ldy #0
3347: LB35F: txa
3348: asl a
3349: tax
3350: tya
3351: rol a
3352: tay
3353: bcs LB30B
3354: asl zFBUFPT
3355: rol zFBUFPT + 1
3356: bcc LB378
3357: clc
3358: txa
3359: adc zTEMP_28
3360: tax
3361: tya
3362: adc zTEMP_28 + 1
3363: tay
3364: bcs LB30B
3365: LB378: dec zTEMP_5D
3366: bne LB35F
3367: rts
3368: bFRE: lda zVALTYP
3369: beq LB384
3370: jsr LB6A6
3371: LB384: jsr bGARBAG
3372: sec
3373: lda zFRETOP
3374: sbc zSTREND
3375: tay
3376: lda zFRETOP + 1
3377: sbc zSTREND + 1
3378: bGIVAYF:ldx #0
3379: stx zVALTYP
3380: sta zFACHO
3381: sty zFACHO + 1
3382: ldx #$90
3383: jmp LBC44
3384: bPOS: sec
3385: jsr kPLOT
3386: LB3A2: lda #0
3387: beq bGIVAYF
3388: bERRDIR:ldx zCURLIN + 1
3389: inx
3390: bne LB34B
3391: ldx #ErrIllegalDirect
3392: .byte ASM_BIT3
3393: bUFERR: ldx #ErrUndefdFunction
3394: jmp bERROR
3395:
3396: bDEF: jsr bGETFNM
3397: jsr bERRDIR
3398: jsr bCHKopen
3399: lda #$80
3400: sta zINTALLOWED
3401: jsr bPTRGET
3402: jsr LAD8D
3403: jsr bCHKclose
3404: lda #TokEqual
3405: jsr LAEFF
3406: pha
3407: lda zVARPNT + 1
3408: pha
3409: lda zVARPNT
3410: pha
3411: lda zTXTPTR + 1
3412: pha
3413: lda zTXTPTR
3414: pha
3415: jsr bDATA
3416: jmp LB44F
3417: bGETFNM:lda #TokFn
3418: jsr LAEFF
3419: ora #$80
3420: sta zINTALLOWED
3421: jsr LB092
3422: sta zTEMPF3
3423: sty zTEMPF3 + 1
3424: jmp LAD8D
3425: bFNDOER:jsr bGETFNM
3426: lda zTEMPF3 + 1
3427: pha
3428: lda zTEMPF3
3429: pha
3430: jsr bOARCHK
3431: jsr LAD8D
3432: pla
3433: sta zTEMPF3
3434: pla
3435: sta zTEMPF3 + 1
3436: ldy #2
3437: lda (zTEMPF3),y
3438: sta zVARPNT
3439: tax
3440: iny
3441: lda (zTEMPF3),y
3442: beq bUFERR
3443: sta zVARPNT + 1
3444: iny
3445: LB418: lda (zVARPNT),y
3446: pha
3447: dey
3448: bpl LB418
3449: ldy zVARPNT + 1
3450: jsr LBBD4
3451: lda zTXTPTR + 1
3452: pha
3453: lda zTXTPTR
3454: pha
3455: lda (zTEMPF3),y
3456: sta zTXTPTR
3457: iny
3458: lda (zTEMPF3),y
3459: sta zTXTPTR + 1
3460: lda zVARPNT + 1
3461: pha
3462: lda zVARPNT
3463: pha
3464: jsr bFRMNUM
3465: pla
3466: sta zTEMPF3
3467: pla
3468: sta zTEMPF3 + 1
3469: jsr zCHRGOT
3470: beq LB449
3471: jmp bSYNERR
3472: LB449: pla
3473: sta zTXTPTR
3474: pla
3475: sta zTXTPTR + 1
3476: LB44F: ldy #0
3477: pla
3478: sta (zTEMPF3),y
3479: pla
3480: iny
3481: sta (zTEMPF3),y
3482: pla
3483: iny
3484: sta (zTEMPF3),y
3485: pla
3486: iny
3487: sta (zTEMPF3),y
3488: pla
3489: iny
3490: sta (zTEMPF3),y
3491: rts
3492: bSTRD: jsr LAD8D
3493: ldy #0
3494: jsr LBDDF
3495: pla
3496: pla
3497: LB46F: lda #<(zASCWRK)
3498: ldy #>(zASCWRK)
3499: beq bSTRLIT
3500:
3501:
3502: LB475: ldx zFACHO + 2
3503: ldy zFACHO + 3
3504: stx zTEMP_50
3505: sty zTEMP_50 + 1
3506: LB47D: jsr bGETSPA
3507: stx zFACHO
3508: sty zFACHO + 1
3509: sta zFACEXP
3510: rts
3511: bSTRLIT:ldx #'"'
3512: stx zCHARAC
3513: stx zENDCHR
3514: LB48D: sta zARISGN
3515: sty zFACOV
3516: sta zFACHO
3517: sty zFACHO + 1
3518: ldy #-1
3519: LB497: iny
3520: lda (zARISGN),y
3521: beq LB4A8
3522: cmp zCHARAC
3523: beq LB4A4
3524: cmp zENDCHR
3525: bne LB497
3526: LB4A4: cmp #'"'
3527: beq LB4A9
3528: LB4A8: clc
3529: LB4A9: sty zFACEXP
3530: tya
3531: adc zARISGN
3532: sta zFBUFPT
3533: ldx zFACOV
3534: bcc LB4B5
3535: inx
3536: LB4B5: stx zFBUFPT + 1
3537: lda zFACOV
3538: beq LB4BF
3539: cmp #2
3540: bne LB4CA
3541: LB4BF: tya
3542: jsr LB475
3543: ldx zARISGN
3544: ldy zFACOV
3545: JDLB4C7:
3546: jsr LB688
3547: LB4CA: ldx zTEMPPT
3548: cpx #zTEMPST + 9
3549: bne bPUTNW1
3550: ldx #ErrFormulaTooComplex
3551: LB4D2: jmp bERROR
3552: bPUTNW1:lda zFACEXP
3553: sta 0,x
3554: lda zFACHO
3555: sta 1,x
3556: lda zFACHO + 1
3557: sta 2,x
3558: ldy #>zTEMPST
3559: stx zFACHO + 2
3560: sty zFACHO + 3
3561: sty zFACOV
3562: dey
3563: sty zVALTYP
3564: stx zLASTPT
3565: inx
3566: inx
3567: inx
3568: stx zTEMPPT
3569: rts
3570: bGETSPA:lsr zGARBFL
3571: LB4F6: pha
3572: eor #$FF
3573: sec
3574: adc zFRETOP
3575: ldy zFRETOP + 1
3576: bcs LB501
3577: dey
3578: LB501: cpy zSTREND + 1
3579: bcc LB516
3580: bne LB50B
3581: cmp zSTREND
3582: bcc LB516
3583: LB50B: sta zFRETOP
3584: sty zFRETOP + 1
3585: sta zFRESPC
3586: sty zFRESPC + 1
3587: tax
3588: pla
3589: rts
3590: LB516: ldx #$10
3591: lda zGARBFL
3592: bmi LB4D2
3593: jsr bGARBAG
3594: lda #$80
3595: sta zGARBFL
3596: pla
3597: bne LB4F6
3598: bGARBAG:ldx zMEMSIZ
3599: lda zMEMSIZ + 1
3600: LB52A: stx zFRETOP
3601: sta zFRETOP + 1
3602: ldy #0
3603: sty zTEMPF3 + 1
3604: sty zTEMPF3
3605: lda zSTREND
3606: ldx zSTREND + 1
3607: sta zTEMP_5F
3608: stx zTEMP_5F + 1
3609: lda #<zTEMPST
3610: ldx #>zTEMPST
3611: sta zINDEX
3612: stx zINDEX + 1
3613: LB544: cmp zTEMPPT
3614: beq LB54D
3615: jsr LB5C7
3616: beq LB544
3617: LB54D: lda #$07
3618: sta zFOUR6
3619: lda zVARTAB
3620: ldx zVARTAB + 1
3621: sta zINDEX
3622: stx zINDEX + 1
3623: LB559: cpx zARYTAB + 1
3624: bne LB561
3625: cmp zARYTAB
3626: beq LB566
3627: LB561: jsr bDVARS
3628: beq LB559
3629: LB566: sta zTEMP_58
3630: stx zTEMP_58 + 1
3631: lda #3
3632: sta zFOUR6
3633: LB56E: lda zTEMP_58
3634: ldx zTEMP_58 + 1
3635: LB572: cpx zSTREND + 1
3636: bne LB57D
3637: cmp zSTREND
3638: bne LB57D
3639: jmp bGRBPAS
3640: LB57D: sta zINDEX
3641: stx zINDEX + 1
3642: ldy #0
3643: lda (zINDEX),y
3644: tax
3645: iny
3646: lda (zINDEX),y
3647: php
3648: iny
3649: lda (zINDEX),y
3650: adc zTEMP_58
3651: sta zTEMP_58
3652: iny
3653: lda (zINDEX),y
3654: adc zTEMP_58 + 1
3655: sta zTEMP_58 + 1
3656: plp
3657: bpl LB56E
3658: txa
3659: bmi LB56E
3660: iny
3661: lda (zINDEX),y
3662: ldy #0
3663: asl a
3664: adc #5
3665: adc zINDEX
3666: sta zINDEX
3667: bcc LB5AE
3668: inc zINDEX + 1
3669: LB5AE: ldx zINDEX + 1
3670: LB5B0: cpx zTEMP_58 + 1
3671: bne LB5B8
3672: cmp zTEMP_58
3673: beq LB572
3674: LB5B8: jsr LB5C7
3675: beq LB5B0
3676: bDVARS: lda (zINDEX),y
3677: bmi LB5F6
3678: iny
3679: lda (zINDEX),y
3680: bpl LB5F6
3681: iny
3682: LB5C7: lda (zINDEX),y
3683: beq LB5F6
3684: iny
3685: lda (zINDEX),y
3686: tax
3687: iny
3688: lda (zINDEX),y
3689: cmp zFRETOP + 1
3690: bcc LB5DC
3691: bne LB5F6
3692: cpx zFRETOP
3693: bcs LB5F6
3694: LB5DC: cmp zTEMP_5F + 1
3695: bcc LB5F6
3696: bne LB5E6
3697: cpx zTEMP_5F
3698: bcc LB5F6
3699: LB5E6: stx zTEMP_5F
3700: sta zTEMP_5F + 1
3701: lda zINDEX
3702: ldx zINDEX + 1
3703: sta zTEMPF3
3704: stx zTEMPF3 + 1
3705: lda zFOUR6
3706: sta zJMPER + 1
3707: LB5F6: lda zFOUR6
3708: clc
3709: adc zINDEX
3710: sta zINDEX
3711: bcc LB601
3712: inc zINDEX + 1
3713: LB601: ldx zINDEX + 1
3714: ldy #0
3715: rts
3716: bGRBPAS:lda zTEMPF3 + 1
3717: ora zTEMPF3
3718: beq LB601
3719: lda zJMPER + 1
3720: and #$04
3721: lsr a
3722: tay
3723: sta zJMPER + 1
3724: lda (zTEMPF3),y
3725: adc zTEMP_5F
3726: sta zTEMP_5A
3727: lda zTEMP_5F + 1
3728: adc #0
3729: sta zTEMP_5A + 1
3730: lda zFRETOP
3731: ldx zFRETOP + 1
3732: sta zTEMP_58
3733: stx zTEMP_58 + 1
3734: jsr MoveMem
3735: ldy zJMPER + 1
3736: iny
3737: lda zTEMP_58
3738: sta (zTEMPF3),y
3739: tax
3740: inc zTEMP_58 + 1
3741: lda zTEMP_58 + 1
3742: iny
3743: sta (zTEMPF3),y
3744: jmp LB52A
3745: bCAT: lda zFACHO + 3
3746: pha
3747: lda zFACHO + 2
3748: pha
3749: jsr bEVAL
3750: jsr LAD8F
3751: pla
3752: sta zARISGN
3753: pla
3754: sta zFACOV
3755: ldy #0
3756: lda (zARISGN),y
3757: clc
3758: adc (zFACHO + 2),y
3759: bcc LB65D
3760: ldx #ErrStringTooLong
3761: jmp bERROR
3762: LB65D: jsr LB475
3763: jsr bMOVINS
3764: lda zTEMP_50
3765: ldy zTEMP_50 + 1
3766: jsr LB6AA
3767: jsr LB68C
3768: lda zARISGN
3769: ldy zFACOV
3770: jsr LB6AA
3771: jsr LB4CA
3772: jmp LADB8
3773: bMOVINS:ldy #0
3774: lda (zARISGN),y
3775: pha
3776: iny
3777: lda (zARISGN),y
3778: tax
3779: iny
3780: lda (zARISGN),y
3781: tay
3782: pla
3783: LB688: stx zINDEX
3784: sty zINDEX + 1
3785: LB68C: tay
3786: beq LB699
3787: pha
3788: LB690: dey
3789: lda (zINDEX),y
3790: sta (zFRESPC),y
3791: tya
3792: bne LB690
3793: pla
3794: LB699: clc
3795: adc zFRESPC
3796: sta zFRESPC
3797: bcc LB6A2
3798: inc zFRESPC + 1
3799: LB6A2: rts
3800: bFRESTR:jsr LAD8F
3801: LB6A6: lda zFACHO + 2
3802: ldy zFACHO + 3
3803: LB6AA: sta zINDEX
3804: sty zINDEX + 1
3805: jsr bFREFAC
3806: php
3807: ldy #0
3808: lda (zINDEX),y
3809: pha
3810: iny
3811: lda (zINDEX),y
3812: tax
3813: iny
3814: lda (zINDEX),y
3815: tay
3816: pla
3817: plp
3818: bne LB6D6
3819: cpy zFRETOP + 1
3820: bne LB6D6
3821: cpx zFRETOP
3822: bne LB6D6
3823: pha
3824: clc
3825: adc zFRETOP
3826: sta zFRETOP
3827: bcc LB6D5
3828: inc zFRETOP + 1
3829: LB6D5: pla
3830: LB6D6: stx zINDEX
3831: sty zINDEX + 1
3832: rts
3833: bFREFAC:cpy zLASTPT + 1
3834: bne LB6EB
3835: cmp zLASTPT
3836: bne LB6EB
3837: sta zTEMPPT
3838: sbc #3
3839: sta zLASTPT
3840: ldy #0
3841: LB6EB: rts
3842: bCHRD: jsr LB7A1
3843: txa
3844: pha
3845: lda #1
3846: jsr LB47D
3847: pla
3848: ldy #0
3849: sta (zFACHO),y
3850: pla
3851: pla
3852: jmp LB4CA
3853: bLEFTD: jsr bPREAM
3854: cmp (zTEMP_50),y
3855: tya
3856: LB706: bcc LB70C
3857: lda (zTEMP_50),y
3858: tax
3859: tya
3860: LB70C: pha
3861: LB70D: txa
3862: LB70E: pha
3863: jsr LB47D
3864: lda zTEMP_50
3865: ldy zTEMP_50 + 1
3866: jsr LB6AA
3867: pla
3868: tay
3869: pla
3870: clc
3871: adc zINDEX
3872: sta zINDEX
3873: bcc LB725
3874: inc zINDEX + 1
3875: LB725: tya
3876: jsr LB68C
3877: jmp LB4CA
3878: bRIGHTD:jsr bPREAM
3879: clc
3880: sbc (zTEMP_50),y
3881: eor #$FF
3882: jmp LB706
3883: bMIDD: lda #$FF
3884: sta zFACHO + 3
3885: jsr zCHRGOT
3886: cmp #')'
3887: beq LB748
3888: jsr bCHKCMA
3889: jsr LB79E
3890: LB748: jsr bPREAM
3891: beq LB798
3892: dex
3893: txa
3894: pha
3895: clc
3896: ldx #0
3897: sbc (zTEMP_50),y
3898: bcs LB70D
3899: eor #$FF
3900: cmp zFACHO + 3
3901: bcc LB70E
3902: lda zFACHO + 3
3903: bcs LB70E
3904: bPREAM: jsr bCHKclose
3905: pla
3906: tay
3907: pla
3908: sta zJMPER + 1
3909: pla
3910: pla
3911: pla
3912: tax
3913: pla
3914: sta zTEMP_50
3915: pla
3916: sta zTEMP_50 + 1
3917: lda zJMPER + 1
3918: pha
3919: tya
3920: pha
3921: ldy #0
3922: txa
3923: rts
3924: bLEN: jsr bLEN1
3925: jmp LB3A2
3926: bLEN1: jsr bFRESTR
3927: ldx #0
3928: stx zVALTYP
3929: tay
3930: rts
3931: bASC: jsr bLEN1
3932: beq LB798
3933: ldy #0
3934: lda (zINDEX),y
3935: tay
3936: jmp LB3A2
3937: LB798: jmp bIQERR
3938: bGTBYTC:jsr zCHRGET
3939: LB79E: jsr bFRMNUM
3940: LB7A1: jsr LB1B8
3941: ldx zFACHO + 2
3942: bne LB798
3943: ldx zFACHO + 3
3944: jmp zCHRGOT
3945: bVAL: jsr bLEN1
3946: bne bSTRVAL
3947: jmp LB8F7
3948: bSTRVAL:ldx zTXTPTR
3949: ldy zTXTPTR + 1
3950: stx zFBUFPT
3951: sty zFBUFPT + 1
3952: ldx zINDEX
3953: stx zTXTPTR
3954: clc
3955: adc zINDEX
3956: sta zINDEX2
3957: ldx zINDEX + 1
3958: stx zTXTPTR + 1
3959: bcc LB7CD
3960: inx
3961: LB7CD: stx zINDEX2 + 1
3962: ldy #0
3963: lda (zINDEX2),y
3964: pha
3965: tya
3966: sta (zINDEX2),y
3967: jsr zCHRGOT
3968: jsr bFIN
3969: pla
3970: ldy #0
3971: sta (zINDEX2),y
3972: LB7E2: ldx zFBUFPT
3973: ldy zFBUFPT + 1
3974: stx zTXTPTR
3975: sty zTXTPTR + 1
3976: rts
3977: bGETNUM:jsr bFRMNUM
3978: jsr bGETADR
3979: LB7F1: jsr bCHKCMA
3980: jmp LB79E
3981: bGETADR:lda zFACSGN
3982: bmi LB798
3983: lda zFACEXP
3984: cmp #$91
3985: bcs LB798
3986: jsr bQINT
3987: lda zFACHO + 2
3988: ldy zFACHO + 3
3989: sty zLINNUM
3990: sta zLINNUM + 1
3991: rts
3992: bPEEK: lda zLINNUM + 1
3993: pha
3994: lda zLINNUM
3995: pha
3996: jsr bGETADR
3997: ldy #0
3998: lda (zLINNUM),y
3999: tay
4000: pla
4001: sta zLINNUM
4002: pla
4003: sta zLINNUM + 1
4004: jmp LB3A2
4005: bPOKE: jsr bGETNUM
4006: txa
4007: ldy #0
4008: sta (zLINNUM),y
4009: rts
4010: bWAIT: jsr bGETNUM
4011: stx zFORPNT
4012: ldx #0
4013: jsr zCHRGOT
4014: beq LB83C
4015: jsr LB7F1
4016: LB83C: stx zFORPNT + 1
4017: ldy #0
4018: LB840: lda (zLINNUM),y
4019: eor zFORPNT + 1
4020: and zFORPNT
4021: beq LB840
4022: LB848: rts
4023: bFADDH: lda #<bFHALF
4024: ldy #>bFHALF
4025: jmp bFADD
4026: bFSUB: jsr bCONUPK
4027: FSUBT: lda zFACSGN
4028: eor #$FF
4029: sta zFACSGN
4030: eor zARGSGN
4031: sta zARISGN
4032: lda zFACEXP
4033: jmp FADDT
4034: bFADD5: jsr LB999
4035: bcc LB8A3
4036: bFADD: jsr bCONUPK
4037: FADDT: bne LB86F
4038: jmp bMOVFA
4039: LB86F: ldx zFACOV
4040: stx zJMPER + 2
4041: ldx #zARGEXP
4042: lda zARGEXP
4043: LB877: tay
4044: beq LB848
4045: sec
4046: sbc zFACEXP
4047: beq LB8A3
4048: bcc LB893
4049: sty zFACEXP
4050: ldy zARGSGN
4051: sty zFACSGN
4052: eor #$FF
4053: adc #0
4054: ldy #0
4055: sty zJMPER + 2
4056: ldx #zFACEXP
4057: bne LB897
4058: LB893: ldy #0
4059: sty zFACOV
4060: LB897: cmp #$F9
4061: bmi bFADD5
4062: tay
4063: lda zFACOV
4064: lsr 1,x
4065: jsr LB9B0
4066: LB8A3: bit zARISGN
4067: bpl LB8FE
4068: ldy #zFACEXP
4069: cpx #zARGEXP
4070: beq LB8AF
4071: ldy #zARGEXP
4072: LB8AF: sec
4073: eor #$FF
4074: adc zJMPER + 2
4075: sta zFACOV
4076: lda 4,y
4077: sbc 4,x
4078: sta zFACHO + 3
4079: lda zADRAY1,y
4080: sbc zADRAY1,x
4081: sta zFACHO + 2
4082: lda 2,y
4083: sbc 2,x
4084: sta zFACHO + 1
4085: lda 1,y
4086: sbc 1,x
4087: sta zFACHO
4088: LB8D2: bcs LB8D7
4089: jsr bNEGFAC
4090: LB8D7: ldy #0
4091: tya
4092: clc
4093: LB8DB: ldx zFACHO
4094: bne LB929
4095: ldx zFACHO + 1
4096: stx zFACHO
4097: ldx zFACHO + 2
4098: stx zFACHO + 1
4099: ldx zFACHO + 3
4100: stx zFACHO + 2
4101: ldx zFACOV
4102: stx zFACHO + 3
4103: sty zFACOV
4104: adc #8
4105: cmp #$20
4106: bne LB8DB
4107: LB8F7: lda #0
4108: LB8F9: sta zFACEXP
4109: LB8FB: sta zFACSGN
4110: rts
4111: LB8FE: adc zJMPER + 2
4112: sta zFACOV
4113: lda zFACHO + 3
4114: adc zARGHO + 3
4115: sta zFACHO + 3
4116: lda zFACHO + 2
4117: adc zARGHO + 2
4118: sta zFACHO + 2
4119: lda zFACHO + 1
4120: adc zARGHO + 1
4121: sta zFACHO + 1
4122: lda zFACHO
4123: adc zARGHO
4124: sta zFACHO
4125: jmp LB936
4126: LB91D: adc #1
4127: asl zFACOV
4128: rol zFACHO + 3
4129: rol zFACHO + 2
4130: rol zFACHO + 1
4131: rol zFACHO
4132: LB929: bpl LB91D
4133: sec
4134: sbc zFACEXP
4135: bcs LB8F7
4136: eor #$FF
4137: adc #1
4138: sta zFACEXP
4139: LB936: bcc LB946
4140: LB938: inc zFACEXP
4141: beq bOVERR
4142: ror zFACHO
4143: ror zFACHO + 1
4144: ror zFACHO + 2
4145: ror zFACHO + 3
4146: ror zFACOV
4147: LB946: rts
4148: bNEGFAC:lda zFACSGN
4149: eor #$FF
4150: sta zFACSGN
4151: LB94D: lda zFACHO
4152: eor #$FF
4153: sta zFACHO
4154: lda zFACHO + 1
4155: eor #$FF
4156: sta zFACHO + 1
4157: lda zFACHO + 2
4158: eor #$FF
4159: sta zFACHO + 2
4160: lda zFACHO + 3
4161: eor #$FF
4162: sta zFACHO + 3
4163: lda zFACOV
4164: eor #$FF
4165: sta zFACOV
4166: inc zFACOV
4167: bne LB97D
4168: LB96F: inc zFACHO + 3
4169: bne LB97D
4170: inc zFACHO + 2
4171: bne LB97D
4172: inc zFACHO + 1
4173: bne LB97D
4174: inc zFACHO
4175: LB97D: rts
4176: bOVERR: ldx #ErrOverflow
4177: jmp bERROR
4178: bMULSHF:ldx #zRESHO - 1
4179: LB985: ldy 4,x
4180: sty zFACOV
4181: ldy 3,x
4182: sty 4,x
4183: ldy 2,x
4184: sty 3,x
4185: ldy 1,x
4186: sty 2,x
4187: ldy zBITS
4188: sty 1,x
4189: LB999: adc #8
4190: bmi LB985
4191: beq LB985
4192: sbc #8
4193: tay
4194: lda zFACOV
4195: bcs LB9BA
4196: LB9A6: asl 1,x
4197: bcc LB9AC
4198: inc 1,x
4199: LB9AC: ror 1,x
4200: ror 1,x
4201: LB9B0: ror 2,x
4202: ror 3,x
4203: ror 4,x
4204: ror a
4205: iny
4206: bne LB9A6
4207: LB9BA: clc
4208: rts
4209:
4210: bFPTABL:.byte $81,$00,$00,$00,$00
4211: LB9C1: .byte $03
4212: .byte $7F,$5E,$56,$CB,$79
4213: .byte $80,$13,$9B,$0B,$64
4214: .byte $80,$76,$38,$93,$16
4215: .byte $82,$38,$AA,$3B,$20
4216: LB9D6: .byte $80,$35,$04,$F3,$34
4217: LB9DB: .byte $81,$35,$04,$F3,$34
4218: LB9E0: .byte $80,$80,$00,$00,$00
4219: LB9E5: .byte $80,$31,$72,$17,$F8
4220:
4221: bLOG: jsr bSIGN
4222: beq LB9F1
4223: bpl LB9F4
4224: LB9F1: jmp bIQERR
4225: LB9F4: lda zFACEXP
4226: sbc #$7F
4227: pha
4228: lda #$80
4229: sta zFACEXP
4230: lda #<LB9D6
4231: ldy #>LB9D6
4232: jsr bFADD
4233: lda #<LB9DB
4234: ldy #>LB9DB
4235: jsr bFDIVT
4236: lda #<bFPTABL
4237: ldy #>bFPTABL
4238: jsr bFSUB
4239: lda #<LB9C1
4240: ldy #>LB9C1
4241: jsr bPOLYX
4242: lda #<LB9E0
4243: ldy #>LB9E0
4244: jsr bFADD
4245: pla
4246: jsr LBD7E
4247: lda #<LB9E5
4248: ldy #>LB9E5
4249: bFMULT: jsr bCONUPK
4250: FMULTT: bne LBA30
4251: jmp LBA8B
4252: LBA30: jsr bMULDIV
4253: lda #$00
4254: sta zRESHO
4255: sta zRESHO + 1
4256: sta zRESHO + 2
4257: sta zRESHO + 3
4258: lda zFACOV
4259: jsr bMULPLY
4260: lda zFACHO + 3
4261: jsr bMULPLY
4262: lda zFACHO + 2
4263: jsr bMULPLY
4264: lda zFACHO + 1
4265: jsr bMULPLY
4266: lda zFACHO
4267: jsr LBA5E
4268: jmp LBB8F
4269: bMULPLY:bne LBA5E
4270: jmp bMULSHF
4271: LBA5E: lsr a
4272: ora #$80
4273: LBA61: tay
4274: bcc LBA7D
4275: clc
4276: lda zRESHO + 3
4277: adc zARGHO + 3
4278: sta zRESHO + 3
4279: lda zRESHO + 2
4280: adc zARGHO + 2
4281: sta zRESHO + 2
4282: lda zRESHO + 1
4283: adc zARGHO + 1
4284: sta zRESHO + 1
4285: lda zRESHO
4286: adc zARGHO
4287: sta zRESHO
4288: LBA7D: ror zRESHO
4289: ror zRESHO + 1
4290: ror zRESHO + 2
4291: ror zRESHO + 3
4292: ror zFACOV
4293: tya
4294: lsr a
4295: bne LBA61
4296: LBA8B: rts
4297: bCONUPK:sta zINDEX
4298: sty zINDEX + 1
4299: ldy #4
4300: lda (zINDEX),y
4301: sta zARGHO + 3
4302: dey
4303: lda (zINDEX),y
4304: sta zARGHO + 2
4305: dey
4306: lda (zINDEX),y
4307: sta zARGHO + 1
4308: dey
4309: lda (zINDEX),y
4310: sta zARGSGN
4311: eor zFACSGN
4312: sta zARISGN
4313: lda zARGSGN
4314: ora #$80
4315: sta zARGHO
4316: dey
4317: lda (zINDEX),y
4318: sta zARGEXP
4319: lda zFACEXP
4320: rts
4321: bMULDIV:lda zARGEXP
4322: LBAB9: beq LBADA
4323: clc
4324: adc zFACEXP
4325: bcc LBAC4
4326: bmi LBADF
4327: clc
4328: .byte ASM_BIT3
4329: LBAC4: bpl LBADA
4330: adc #$80
4331: sta zFACEXP
4332: bne LBACF
4333: jmp LB8FB
4334: LBACF: lda zARISGN
4335: sta zFACSGN
4336: rts
4337: bMLDVEX:lda zFACSGN
4338: eor #$FF
4339: bmi LBADF
4340: LBADA: pla
4341: pla
4342: jmp LB8F7
4343: LBADF: jmp bOVERR
4344: bMUL10: jsr bMOVAF
4345: tax
4346: beq LBAF8
4347: clc
4348: adc #2
4349: bcs LBADF
4350: LBAED: ldx #0
4351: stx zARISGN
4352: jsr LB877
4353: inc zFACEXP
4354: beq LBADF
4355: LBAF8: rts
4356:
4357: bTENC: .byte $84,$20,$00,$00,$00
4358:
4359: bDIV10: jsr bMOVAF
4360: lda #<bTENC
4361: ldy #>bTENC
4362: ldx #0
4363: bFDIV: stx zARISGN
4364: jsr bMOVFM
4365: jmp FDIVT
4366: bFDIVT: jsr bCONUPK
4367: FDIVT: beq LBB8A
4368: jsr bROUND
4369: lda #0
4370: sec
4371: sbc zFACEXP
4372: sta zFACEXP
4373: jsr bMULDIV
4374: inc zFACEXP
4375: beq LBADF
4376: ldx #-4
4377: lda #1
4378: LBB29: ldy zARGHO
4379: cpy zFACHO
4380: bne LBB3F
4381: ldy zARGHO + 1
4382: cpy zFACHO + 1
4383: bne LBB3F
4384: ldy zARGHO + 2
4385: cpy zFACHO + 2
4386: bne LBB3F
4387: ldy zARGHO + 3
4388: cpy zFACHO + 3
4389: LBB3F: php
4390: rol a
4391: bcc LBB4C
4392: inx
4393: sta zRESHO + 3,x
4394: beq LBB7A
4395: bpl LBB7E
4396: lda #1
4397: LBB4C: plp
4398: bcs LBB5D
4399: LBB4F: asl zARGHO + 3
4400: rol zARGHO + 2
4401: rol zARGHO + 1
4402: rol zARGHO
4403: bcs LBB3F
4404: bmi LBB29
4405: bpl LBB3F
4406:
4407: LBB5D: tay
4408: lda zARGHO + 3
4409: sbc zFACHO + 3
4410: sta zARGHO + 3
4411: lda zARGHO + 2
4412: sbc zFACHO + 2
4413: sta zARGHO + 2
4414: lda zARGHO + 1
4415: sbc zFACHO + 1
4416: sta zARGHO + 1
4417: lda zARGHO
4418: sbc zFACHO
4419: sta zARGHO
4420: tya
4421: jmp LBB4F
4422: LBB7A: lda #$40
4423: bne LBB4C
4424:
4425: LBB7E: asl a
4426: asl a
4427: asl a
4428: asl a
4429: asl a
4430: asl a
4431: sta zFACOV
4432: plp
4433: jmp LBB8F
4434: LBB8A: ldx #ErrDivisionByZero
4435: jmp bERROR
4436: LBB8F: lda zRESHO
4437: sta zFACHO
4438: lda zRESHO + 1
4439: sta zFACHO + 1
4440: lda zRESHO + 2
4441: sta zFACHO + 2
4442: lda zRESHO + 3
4443: sta zFACHO + 3
4444: jmp LB8D7
4445: bMOVFM: sta zINDEX
4446: sty zINDEX + 1
4447: ldy #4
4448: lda (zINDEX),y
4449: sta zFACHO + 3
4450: dey
4451: lda (zINDEX),y
4452: sta zFACHO + 2
4453: dey
4454: lda (zINDEX),y
4455: sta zFACHO + 1
4456: dey
4457: lda (zINDEX),y
4458: sta zFACSGN
4459: ora #$80
4460: sta zFACHO
4461: dey
4462: lda (zINDEX),y
4463: sta zFACEXP
4464: sty zFACOV
4465: rts
4466: bMOV2F: ldx #zTEMPF2
4467: .byte ASM_BIT3
4468: LBBCA: ldx #zTEMPF1
4469: ldy #0
4470: beq LBBD4
4471: LBBD0: ldx zFORPNT
4472: ldy zFORPNT + 1
4473: LBBD4: jsr bROUND
4474: stx zINDEX
4475: sty zINDEX + 1
4476: ldy #4
4477: lda zFACHO + 3
4478: sta (zINDEX),y
4479: dey
4480: lda zFACHO + 2
4481: sta (zINDEX),y
4482: dey
4483: lda zFACHO + 1
4484: sta (zINDEX),y
4485: dey
4486: lda zFACSGN
4487: ora #$7F
4488: and zFACHO
4489: sta (zINDEX),y
4490: dey
4491: lda zFACEXP
4492: sta (zINDEX),y
4493: sty zFACOV
4494: rts
4495: bMOVFA: lda zARGSGN
4496: LBBFE: sta zFACSGN
4497: ldx #5
4498: LBC02: lda zARG - 1,x
4499: sta zFAC - 1,x
4500: dex
4501: bne LBC02
4502: stx zFACOV
4503: rts
4504: bMOVAF: jsr bROUND
4505: LBC0F: ldx #6
4506: LBC11: lda zFAC - 1,x
4507: sta zARG - 1,x
4508: dex
4509: bne LBC11
4510: stx zFACOV
4511: LBC1A: rts
4512: bROUND: lda zFACEXP
4513: beq LBC1A
4514: asl zFACOV
4515: bcc LBC1A
4516: LBC23: jsr LB96F
4517: bne LBC1A
4518: jmp LB938
4519: bSIGN: lda zFACEXP
4520: beq LBC38
4521: LBC2F: lda zFACSGN
4522: LBC31: rol a
4523: lda #$FF
4524: bcs LBC38
4525: lda #1
4526: LBC38: rts
4527: bSGN: jsr bSIGN
4528: LBC3C: sta zFACHO
4529: lda #$00
4530: sta zFACHO + 1
4531: ldx #$88
4532: LBC44: lda zFACHO
4533: eor #$FF
4534: rol a
4535: LBC49: lda #$00
4536: sta zFACHO + 3
4537: sta zFACHO + 2
4538: LBC4F: stx zFACEXP
4539: sta zFACOV
4540: sta zFACSGN
4541: jmp LB8D2
4542: bABS: lsr zFACSGN
4543: rts
4544: bFCOMP: sta zINDEX2
4545: LBC5D: sty zINDEX2 + 1
4546: ldy #0
4547: lda (zINDEX2),y
4548: iny
4549: tax
4550: beq bSIGN
4551: lda (zINDEX2),y
4552: eor zFACSGN
4553: bmi LBC2F
4554: cpx zFACEXP
4555: bne LBC92
4556: lda (zINDEX2),y
4557: ora #$80
4558: cmp zFACHO
4559: bne LBC92
4560: iny
4561: lda (zINDEX2),y
4562: cmp zFACHO + 1
4563: bne LBC92
4564: iny
4565: lda (zINDEX2),y
4566: cmp zFACHO + 2
4567: bne LBC92
4568: iny
4569: lda #$7F
4570: cmp zFACOV
4571: lda (zINDEX2),y
4572: sbc zFACHO + 3
4573: beq LBCBA
4574: LBC92: lda zFACSGN
4575: bcc LBC98
4576: eor #$FF
4577: LBC98: jmp LBC31
4578: bQINT: lda zFACEXP
4579: beq LBCE9
4580: sec
4581: sbc #$A0
4582: bit zFACSGN
4583: bpl LBCAF
4584: tax
4585: lda #$FF
4586: sta zBITS
4587: jsr LB94D
4588: txa
4589: LBCAF: ldx #$61
4590: cmp #$F9
4591: bpl LBCBB
4592: jsr LB999
4593: sty zBITS
4594: LBCBA: rts
4595: LBCBB: tay
4596: lda zFACSGN
4597: and #$80
4598: lsr zFACHO
4599: ora zFACHO
4600: sta zFACHO
4601: jsr LB9B0
4602: sty zBITS
4603: rts
4604: bINT: lda zFACEXP
4605: cmp #$A0
4606: bcs LBCF2
4607: jsr bQINT
4608: sty zFACOV
4609: lda zFACSGN
4610: sty zFACSGN
4611: eor #$80
4612: rol a
4613: lda #$A0
4614: sta zFACEXP
4615: lda zFACHO + 3
4616: sta zCHARAC
4617: jmp LB8D2
4618: LBCE9: sta zFACHO
4619: sta zFACHO + 1
4620: sta zFACHO + 2
4621: sta zFACHO + 3
4622: tay
4623: LBCF2: rts
4624: bFIN: ldy #0
4625: ldx #zFACSGN - zTEMPF2
4626: LBCF7: sty zTEMPF2 + 1,x
4627: dex
4628: bpl LBCF7
4629: bcc LBD0D
4630: cmp #'-'
4631: bne LBD06
4632: stx zSGNFLG
4633: beq LBD0A
4634: LBD06: cmp #'+'
4635: bne LBD0F
4636: LBD0A: jsr zCHRGET
4637: LBD0D: bcc LBD6A
4638: LBD0F: cmp #'.'
4639: beq LBD41
4640: cmp #'E'
4641: bne LBD47
4642: jsr zCHRGET
4643: bcc LBD33
4644: cmp #TokMinus
4645: beq LBD2E
4646: cmp #'-'
4647: beq LBD2E
4648: cmp #TokPlus
4649: beq LBD30
4650: cmp #'+'
4651: beq LBD30
4652: bne LBD35
4653: LBD2E: ror zTEMP_60
4654: LBD30: jsr zCHRGET
4655: LBD33: bcc LBD91
4656: LBD35: bit zTEMP_60
4657: bpl LBD47
4658: lda #0
4659: sec
4660: sbc zTEMP_5E
4661: jmp LBD49
4662: LBD41: ror zTEMP_5F
4663: bit zTEMP_5F
4664: bvc LBD0A
4665: LBD47: lda zTEMP_5E
4666: LBD49: sec
4667: sbc zTEMP_5D
4668: sta zTEMP_5E
4669: beq LBD62
4670: bpl LBD5B
4671: LBD52: jsr bDIV10
4672: inc zTEMP_5E
4673: bne LBD52
4674: beq LBD62
4675: LBD5B: jsr bMUL10
4676: dec zTEMP_5E
4677: bne LBD5B
4678: LBD62: lda zSGNFLG
4679: bmi LBD67
4680: rts
4681: LBD67: jmp bNEGOP
4682: LBD6A: pha
4683: bit zTEMP_5F
4684: bpl LBD71
4685: inc zTEMP_5D
4686: LBD71: jsr bMUL10
4687: pla
4688: sec
4689: sbc #'0'
4690: jsr LBD7E
4691: jmp LBD0A
4692: LBD7E: pha
4693: jsr bMOVAF
4694: pla
4695: jsr LBC3C
4696: lda zARGSGN
4697: eor zFACSGN
4698: sta zARISGN
4699: ldx zFACEXP
4700: jmp FADDT
4701: LBD91: lda zTEMP_5E
4702: cmp #10
4703: bcc LBDA0
4704: lda #100
4705: bit zTEMP_60
4706: bmi LBDAE
4707: jmp bOVERR
4708: LBDA0: asl a
4709: asl a
4710: clc
4711: adc zTEMP_5E
4712: asl a
4713: clc
4714: ldy #0
4715: adc (zTXTPTR),y
4716: sec
4717: sbc #'0'
4718: LBDAE: sta zTEMP_5E
4719: jmp LBD30
4720:
4721: bN0999: .byte $9B,$3E,$BC,$1F,$FD
4722: LBDB8: .byte $9E,$6E,$6B,$27,$FD
4723: LBDBD: .byte $9E,$6E,$6B,$28,$00
4724:
4725: bINPRT: lda #<StrIn
4726: ldy #>StrIn
4727: jsr LBDDA
4728:
4729: lda zCURLIN + 1
4730: ldx zCURLIN
4731: LBDCD: sta zFACHO
4732: stx zFACHO + 1
4733: ldx #$90
4734: sec
4735: jsr LBC49
4736: jsr LBDDF
4737: LBDDA: jmp bSTROUT
4738:
4739: bFOUT: ldy #1
4740: LBDDF: lda #' '
4741: bit zFACSGN
4742: bpl LBDE7
4743: lda #'-'
4744: LBDE7: sta zASCWRK,y
4745: sta zFACSGN
4746: sty zFBUFPT
4747: iny
4748: lda #'0'
4749: ldx zFACEXP
4750: bne LBDF8
4751: jmp LBF04
4752: LBDF8: lda #$00
4753: cpx #$80
4754: beq LBE00
4755: bcs LBE09
4756: LBE00: lda #<LBDBD
4757: ldy #>LBDBD
4758: jsr bFMULT
4759: lda #$F7
4760: LBE09: sta zTEMP_5D
4761: LBE0B: lda #<LBDB8
4762: ldy #>LBDB8
4763: jsr bFCOMP
4764: beq LBE32
4765: bpl LBE28
4766: LBE16: lda #<bN0999
4767: ldy #>bN0999
4768: jsr bFCOMP
4769: beq LBE21
4770: bpl LBE2F
4771: LBE21: jsr bMUL10
4772: dec zTEMP_5D
4773: bne LBE16
4774: LBE28: jsr bDIV10
4775: inc zTEMP_5D
4776: bne LBE0B
4777: LBE2F: jsr bFADDH
4778: LBE32: jsr bQINT
4779: ldx #$01
4780: lda zTEMP_5D
4781: clc
4782: adc #$0A
4783: bmi LBE47
4784: cmp #$0B
4785: bcs LBE48
4786: adc #$FF
4787: tax
4788: lda #$02
4789: LBE47: sec
4790: LBE48: sbc #$02
4791: sta zTEMP_5E
4792: stx zTEMP_5D
4793: txa
4794: beq LBE53
4795: bpl LBE66
4796: LBE53: ldy zFBUFPT
4797: lda #'.'
4798: iny
4799: sta zASCWRK,y
4800: txa
4801: beq LBE64
4802: lda #'0'
4803: iny
4804: sta zASCWRK,y
4805: LBE64: sty zFBUFPT
4806: LBE66: ldy #$00
4807: bFOUTIM:ldx #$80
4808: LBE6A: lda zFACHO + 3
4809: clc
4810: adc LBF16 + 3,y
4811: sta zFACHO + 3
4812: lda zFACHO + 2
4813: adc LBF16 + 2,y
4814: sta zFACHO + 2
4815: lda zFACHO + 1
4816: adc LBF16 + 1,y
4817: sta zFACHO + 1
4818: lda zFACHO
4819: adc LBF16,y
4820: sta zFACHO
4821: inx
4822: bcs LBE8E
4823: bpl LBE6A
4824: bmi LBE90
4825: LBE8E: bmi LBE6A
4826: LBE90: txa
4827: bcc LBE97
4828: eor #$FF
4829: adc #10
4830: LBE97: adc #'0' - 1
4831: iny
4832: iny
4833: iny
4834: iny
4835: sty zVARPNT
4836: ldy zFBUFPT
4837: iny
4838: tax
4839: and #$7F
4840: sta zASCWRK,y
4841: dec zTEMP_5D
4842: bne LBEB2
4843: lda #'.'
4844: iny
4845: sta zASCWRK,y
4846: LBEB2: sty zFBUFPT
4847: ldy zVARPNT
4848: txa
4849: eor #$FF
4850: and #$80
4851: tax
4852: cpy #$24
4853: beq LBEC4
4854: cpy #$3C
4855: bne LBE6A
4856: LBEC4: ldy zFBUFPT
4857: LBEC6: lda zASCWRK,y
4858: dey
4859: cmp #'0'
4860: beq LBEC6
4861: cmp #'.'
4862: beq LBED3
4863: iny
4864: LBED3: lda #'+'
4865: ldx zTEMP_5E
4866: beq LBF07
4867: bpl LBEE3
4868: lda #0
4869: sec
4870: sbc zTEMP_5E
4871: tax
4872: lda #'-'
4873: LBEE3: sta lSTACK + 1,y
4874: lda #'E'
4875: sta lSTACK,y
4876: txa
4877: ldx #'0' - 1
4878: sec
4879: LBEEF: inx
4880: sbc #10
4881: bcs LBEEF
4882: adc #'9' + 1
4883: sta lSTACK + 3,y
4884: txa
4885: sta lSTACK + 2,y
4886: lda #0
4887: sta lSTACK + 4,y
4888: beq LBF0C
4889: LBF04: sta zASCWRK,y
4890: LBF07: lda #0
4891: sta lSTACK,y
4892: LBF0C: lda #<lSTACK
4893: ldy #>lSTACK
4894: rts
4895: bFHALF: .byte $80,$00,$00,$00,$00
4896:
4897: bFNULL = bFHALF + 2
4898: bTI = bFNULL
4899:
4900: LBF16: .byte $FA,$0A,$1F,$00
4901:
4902: .byte $00,$98,$96,$80
4903: .byte $FF,$F0,$BD,$C0
4904: .byte $00,$01,$86,$A0
4905: .byte $FF,$FF,$D8,$F0
4906: .byte $00,$00,$03,$E8
4907: .byte $FF,$FF,$FF,$9C
4908: .byte $00,$00,$00,$0A
4909: .byte $FF,$FF,$FF,$FF
4910:
4911: .byte $FF,$DF,$0A,$80
4912: .byte $00,$03,$4B,$C0
4913: .byte $FF,$FF,$73,$60
4914: .byte $00,$00,$0E,$10
4915: .byte $FF,$FF,$FD,$A8
4916: .byte $00,$00,$00,$3C
4917:
4918:
4919:
4920: .byte CHKSUM_BF52
4921:
4922:
4923:
4924: .segment "BASICSQR"
4925:
4926: bSQR: jsr bMOVAF
4927: lda #<bFHALF
4928: ldy #>bFHALF
4929: jsr bMOVFM
4930: bFPWRT: beq bEXP
4931: lda zARGEXP
4932: bne LBF84
4933: jmp LB8F9
4934: LBF84: ldx #<zTEMPF3
4935: ldy #>zTEMPF3
4936: jsr LBBD4
4937: lda zARGSGN
4938: bpl LBF9E
4939: jsr bINT
4940: lda #<zTEMPF3
4941: ldy #>zTEMPF3
4942: jsr bFCOMP
4943: bne LBF9E
4944: tya
4945: ldy zCHARAC
4946: LBF9E: jsr LBBFE
4947: tya
4948: pha
4949: jsr bLOG
4950: lda #<zTEMPF3
4951: ldy #>zTEMPF3
4952: jsr bFMULT
4953: jsr bEXP
4954: pla
4955: lsr a
4956: bcc LBFBE
4957: bNEGOP: lda zFACEXP
4958: beq LBFBE
4959: lda zFACSGN
4960: eor #$FF
4961: sta zFACSGN
4962: LBFBE: rts
4963:
4964: bLOGEB2:
4965: .byte $81,$38,$AA,$3B,$29
4966: LBFC4:
4967: .byte $07
4968: .byte $71,$34,$58,$3E,$56
4969: .byte $74,$16,$7E,$B3,$1B
4970: .byte $77,$2F,$EE,$E3,$85
4971: .byte $7A,$1D,$84,$1C,$2A
4972: .byte $7C,$63,$59,$58,$0A
4973: .byte $7E,$75,$FD,$E7,$C6
4974: .byte $80,$31,$72,$18,$10
4975: .byte $81,$00,$00,$00,$00
4976:
4977: bEXP: lda #<bLOGEB2
4978: ldy #>bLOGEB2
4979: jsr bFMULT
4980: lda zFACOV
4981: adc #$50
4982: bcc LBFFD
4983: jsr LBC23
4984:
4985: LBFFD:
4986:
4987: .segment "BASICSQRJMP"
4988:
4989: jmp LE000
4990:
4991: .segment "BASICSQR2"
4992:
4993: LE000:
4994: sta zJMPER + 2
4995:
4996: .segment "BASICSQR3"
4997: jsr LBC0F
4998: lda zFACEXP
4999: cmp #$88
5000: bcc LE00E
5001: LE00B: jsr bMLDVEX
5002: LE00E: jsr bINT
5003: lda zCHARAC
5004: clc
5005: adc #$81
5006: beq LE00B
5007: sec
5008: sbc #1
5009: pha
5010: ldx #5
5011: LE01E: lda zARGEXP,x
5012: ldy zFACEXP,x
5013: sta zFACEXP,x
5014: sty zARGEXP,x
5015: dex
5016: bpl LE01E
5017: lda zJMPER + 2
5018: sta zFACOV
5019: jsr FSUBT
5020: jsr bNEGOP
5021: lda #<LBFC4
5022: ldy #>LBFC4
5023: jsr LE059
5024: lda #0
5025: sta zARISGN
5026: pla
5027: jsr LBAB9
5028: rts
5029: bPOLYX: sta zFBUFPT
5030: sty zFBUFPT + 1
5031: jsr LBBCA
5032: lda #zTEMPF1
5033: jsr bFMULT
5034: jsr LE05D
5035: lda #<zTEMPF1
5036: ldy #>zTEMPF1
5037: jmp bFMULT
5038: LE059: sta zFBUFPT
5039: sty zFBUFPT + 1
5040: LE05D: jsr bMOV2F
5041: lda (zFBUFPT),y
5042: sta zSGNFLG
5043: ldy zFBUFPT
5044: iny
5045: tya
5046: bne LE06C
5047: inc zFBUFPT + 1
5048: LE06C: sta zFBUFPT
5049: ldy zFBUFPT + 1
5050: LE070: jsr bFMULT
5051: lda zFBUFPT
5052: ldy zFBUFPT + 1
5053: clc
5054: adc #5
5055: bcc LE07D
5056: iny
5057: LE07D: sta zFBUFPT
5058: sty zFBUFPT + 1
5059: jsr bFADD
5060: lda #<zTEMPF2
5061: ldy #>zTEMPF2
5062: dec zSGNFLG
5063: bne LE070
5064: rts
5065: bRMULC: .byte $98,$35,$44,$7A,$00
5066: LE092: .byte $68,$28,$B1,$46,$00
5067:
5068: bRND: jsr bSIGN
5069: bmi LE0D3
5070: bne LE0BE
5071: jsr kIOBASE
5072: stx zINDEX
5073: sty zINDEX + 1
5074: ldy #4
5075: lda (zINDEX),y
5076: sta zFACHO
5077: iny
5078: lda (zINDEX),y
5079: sta zFACHO + 2
5080: ldy #8
5081: lda (zINDEX),y
5082: sta zFACHO + 1
5083: iny
5084: lda (zINDEX),y
5085: sta zFACHO + 3
5086: jmp LE0E3
5087: LE0BE: lda #<zRNDX
5088: ldy #>zRNDX
5089: jsr bMOVFM
5090: lda #<bRMULC
5091: ldy #>bRMULC
5092: jsr bFMULT
5093: lda #<LE092
5094: ldy #>LE092
5095: jsr bFADD
5096: LE0D3: ldx zFACHO + 3
5097: lda zFACHO
5098: sta zFACHO + 3
5099: stx zFACHO
5100: ldx zFACHO + 1
5101: lda zFACHO + 2
5102: sta zFACHO + 1
5103: stx zFACHO + 2
5104: LE0E3: lda #0
5105: sta zFACSGN
5106: lda zFACEXP
5107: sta zFACOV
5108: lda #$80
5109: sta zFACEXP
5110: jsr LB8D7
5111: ldx #<zRNDX
5112: ldy #>zRNDX
5113: LE0F6: jmp LBBD4
5114: bBIOERR:cmp #$F0
5115: bne LE104
5116: sty zMEMSIZ + 1
5117: stx zMEMSIZ
5118: jmp LA663
5119: LE104: tax
5120: bne LE109
5121: ldx #ErrBreak
5122: LE109: jmp bERROR
5123: bCHOUT: jsr kCHROUT
5124: bcs bBIOERR
5125: rts
5126: bCHIN: jsr kCHRIN
5127: bcs bBIOERR
5128: rts
5129: bCKOUT:
5130: .if CompileComputer >= C64_02
5131: jsr LE4AD
5132: .else
5133: jsr kCHKOUT
5134: .endif
5135: bcs bBIOERR
5136: rts
5137: bCKIN: jsr kCHKIN
5138: bcs bBIOERR
5139: rts
5140: bGETIN: jsr kGETIN
5141: bcs bBIOERR
5142: rts
5143: bSYS: jsr bFRMNUM
5144: jsr bGETADR
5145: lda #>(LE147 - 1)
5146: pha
5147: lda #<(LE147 - 1)
5148: pha
5149: lda lSPREG
5150: pha
5151: lda lSAREG
5152: ldx lSXREG
5153: ldy lSYREG
5154: plp
5155: jmp (zLINNUM)
5156: LE147: php
5157: sta lSAREG
5158: stx lSXREG
5159: sty lSYREG
5160: pla
5161: sta lSPREG
5162: rts
5163: bSAVET: jsr bSLPARA
5164: ldx zVARTAB
5165: ldy zVARTAB + 1
5166: lda #zTXTTAB
5167: jsr kSAVE
5168: bcs bBIOERR
5169: rts
5170: bVERFYT:lda #1
5171: .byte ASM_BIT3
5172:
5173: bLOADT: lda #0
5174: sta zVERCK
5175: jsr bSLPARA
5176: lda zVERCK
5177: ldx zTXTTAB
5178: ldy zTXTTAB + 1
5179: jsr kLOAD
5180: bcs LE1D1
5181: lda zVERCK
5182: beq ChkStatus
5183: JDLE17E:
5184: ldx #ErrVerify
5185: jsr kREADST
5186: and #$10
5187:
5188: .if CompileComputer >= C64_GENERAL
5189: bne LE19E
5190: .else
5191:
5192: beq @E187
5193: jmp bERROR
5194: .endif
5195:
5196: @E187: lda zTXTPTR
5197:
5198: cmp #>lBUF
5199: beq LE194
5200: lda #<bOKK
5201: ldy #>bOKK
5202:
5203: jmp bSTROUT
5204: LE194: rts
5205:
5206: ChkStatus:
5207: jsr kREADST
5208: and #$BF
5209: beq LE1A1
5210: ldx #ErrLoad
5211: LE19E: jmp bERROR
5212: LE1A1: lda zTXTPTR + 1
5213: cmp #>lBUF
5214: bne LE1B5
5215: JDLE1A7:
5216: stx zVARTAB
5217: sty zVARTAB + 1
5218: lda #<StrReady
5219: ldy #>StrReady
5220: jsr bSTROUT
5221: jmp LA52A
5222: LE1B5: jsr bSTXPT
5223:
5224: .if CompileComputer >= C64_GENERAL
5225: jsr bLINKPRG
5226: jmp LA677
5227: .elseif CompileComputer >= VIC20_06
5228: JMP LE476
5229: .else
5230: JMP LA677
5231: .endif
5232:
5233:
5234: .segment "BASICOPEN"
5235:
5236: bOPENT: jsr bOCPARA
5237: jsr kOPEN
5238: bcs LE1D1
5239: rts
5240: bCLOSET:jsr bOCPARA
5241: lda zFORPNT
5242: jsr kCLOSE
5243: bcc LE194
5244: LE1D1: jmp bBIOERR
5245: bSLPARA:lda #0
5246: jsr kSETNAM
5247: ldx #1
5248: ldy #0
5249: .ifdef JIFFY
5250: jsr JDLF73A
5251: .else
5252: jsr kSETLFS
5253: .endif
5254: jsr bDEFLT
5255: jsr LE257
5256: jsr bDEFLT
5257: jsr bCOMBYT
5258: ldy #0
5259: stx zFORPNT
5260: jsr kSETLFS
5261: jsr bDEFLT
5262: jsr bCOMBYT
5263: txa
5264: tay
5265: ldx zFORPNT
5266: jmp kSETLFS
5267: bCOMBYT:jsr bCMMERR
5268: jmp LB79E
5269: bDEFLT: jsr zCHRGOT
5270: bne LE20D
5271: pla
5272: pla
5273: LE20D: rts
5274: bCMMERR:jsr bCHKCMA
5275: LE211: jsr zCHRGOT
5276: bne LE20D
5277: jmp bSYNERR
5278: bOCPARA:lda #0
5279: jsr kSETNAM
5280: jsr LE211
5281: jsr LB79E
5282: stx zFORPNT
5283: txa
5284: ldx #1
5285: JDLE229:
5286: ldy #0
5287: jsr kSETLFS
5288: jsr bDEFLT
5289: jsr bCOMBYT
5290: stx zFORPNT + 1
5291: ldy #0
5292: lda zFORPNT
5293: cpx #3
5294: bcc LE23F
5295: dey
5296: LE23F: jsr kSETLFS
5297: jsr bDEFLT
5298: jsr bCOMBYT
5299: txa
5300: tay
5301: ldx zFORPNT + 1
5302: lda zFORPNT
5303: jsr kSETLFS
5304: jsr bDEFLT
5305: jsr bCMMERR
5306: LE257: jsr bFRMEVL
5307: JDLE25A:
5308: jsr bFRESTR
5309: ldx zINDEX
5310: ldy zINDEX + 1
5311: jmp kSETNAM
5312: bCOS: lda #<bPI2
5313: ldy #>bPI2
5314: jsr bFADD
5315: bSIN: jsr bMOVAF
5316: lda #<LE2E5
5317: ldy #>LE2E5
5318: ldx zARGSGN
5319: jsr bFDIV
5320: jsr bMOVAF
5321: jsr bINT
5322: lda #0
5323: sta zARISGN
5324: jsr FSUBT
5325: lda #<LE2EA
5326: ldy #>LE2EA
5327: jsr bFSUB
5328: lda zFACSGN
5329: pha
5330: bpl LE29D
5331: jsr bFADDH
5332: lda zFACSGN
5333: bmi LE2A0
5334: lda zTANSGN
5335: eor #$FF
5336: sta zTANSGN
5337: LE29D: jsr bNEGOP
5338: LE2A0: lda #<LE2EA
5339: ldy #>LE2EA
5340: jsr bFADD
5341: pla
5342: bpl LE2AD
5343: jsr bNEGOP
5344: LE2AD: lda #<LE2EF
5345: ldy #>LE2EF
5346: jmp bPOLYX
5347: bTAN: jsr LBBCA
5348: lda #$00
5349: sta zTANSGN
5350: jsr bSIN
5351: ldx #<zTEMPF3
5352: ldy #>zTEMPF3
5353: jsr LE0F6
5354: lda #<zTEMPF1
5355: ldy #>zTEMPF1
5356: jsr bMOVFM
5357: lda #$00
5358: sta zFACSGN
5359: lda zTANSGN
5360: jsr LE2DC
5361: lda #<zTEMPF3
5362: ldy #>zTEMPF3
5363: jmp bFDIVT
5364: LE2DC: pha
5365: jmp LE29D
5366:
5367: bPI2: .byte $81,$49,$0F,$DA,$A2
5368: LE2E5: .byte $83,$49,$0F,$DA,$A2
5369: LE2EA: .byte $7F,$00,$00,$00,$00
5370: LE2EF: .byte $05
5371: .byte $84,$E6,$1A,$2D,$1B
5372: .byte $86,$28,$07,$FB,$F8
5373: .byte $87,$99,$68,$89,$01
5374: .byte $87,$23,$35,$DF,$E1
5375: .byte $86,$A5,$5D,$E7,$28
5376: .byte $83,$49,$0F,$DA,$A2
5377:
5378: bATN: lda zFACSGN
5379: pha
5380: bpl LE316
5381: jsr bNEGOP
5382: LE316: lda zFACEXP
5383: pha
5384: cmp #$81
5385: bcc LE324
5386: lda #<bFPTABL
5387: ldy #>bFPTABL
5388: jsr bFDIVT
5389: LE324: lda #<bATNCON
5390: ldy #>bATNCON
5391: jsr bPOLYX
5392: pla
5393: cmp #$81
5394: bcc LE337
5395: lda #<bPI2
5396: ldy #>bPI2
5397: jsr bFSUB
5398: LE337: pla
5399: bpl LE33D
5400: jmp bNEGOP
5401: LE33D: rts
5402:
5403: bATNCON:.byte $0B
5404: .byte $76,$B3,$83,$BD,$D3
5405: .byte $79,$1E,$F4,$A6,$F5
5406: .byte $7B,$83,$FC,$B0,$10
5407: .byte $7C,$0C,$1F,$67,$CA
5408: .byte $7C,$DE,$53,$CB,$C1
5409: .byte $7D,$14,$64,$70,$4C
5410: .byte $7D,$B7,$EA,$51,$7A
5411: .byte $7D,$63,$30,$88,$7E
5412: .byte $7E,$92,$44,$99,$3A
5413: .byte $7E,$4C,$CC,$91,$C7
5414: .byte $7F,$AA,$AA,$AA,$13
5415: .byte $81,$00,$00,$00,$00
5416:
5417: .if CompileComputer >= C64_GENERAL
5418: LE37B: jsr kCLRCHN
5419: lda #0
5420: sta z13
5421: jsr LA67A
5422: cli
5423:
5424:
5425: ReadyVector:
5426: ldx #$80
5427: jmp (lIERROR)
5428:
5429: PatchErrorOut:
5430: txa
5431: bmi @LE391
5432: jmp ErrorOut
5433: @LE391:
5434: jmp bREADY
5435: .endif
5436:
5437: LE394:
5438: .ifdef JIFFY
5439: jsr JDLE4B7
5440: .else
5441: jsr LE453
5442: .endif
5443: jsr LE3BF
5444: jsr LE422
5445: ldx #-5
5446: txs
5447:
5448: .if CompileComputer >= C64_GENERAL
5449: bne ReadyVector
5450: .else
5451: jmp bREADY
5452: .endif
5453:
5454: .segment "CHRGET"
5455:
5456: COPY_OF_CHRGET:
5457: inc zTXTPTR
5458: bne COPY_OF_CHRGOT
5459: inc zTXTPTR + 1
5460:
5461: COPY_OF_CHRGOT:
5462: lda $EA60
5463: cmp #'9' + 1
5464: bcs COPY_OF_CHRGOT_RTS
5465:
5466: COPY_OF_CHRGOT_SPACE:
5467: cmp #' '
5468: beq COPY_OF_CHRGET
5469: sec
5470: sbc #'0'
5471: sec
5472: sbc #-'0'
5473: COPY_OF_CHRGOT_RTS:
5474: rts
5475:
5476: .byte $80,$4F,$C7,$52,$58
5477:
5478: END_COPY_OF_CHRGET:
5479:
5480: .segment "INIT"
5481:
5482: LE3BF: lda #ASM_JMP
5483: sta zJMPER
5484: sta lUSRPOK
5485: lda #<bIQERR
5486: ldy #>bIQERR
5487: sta lUSRADD
5488: sty lUSRADD + 1
5489: lda #<bGIVAYF
5490: ldy #>bGIVAYF
5491: sta zADRAY2
5492: sty zADRAY2 + 1
5493: lda #<bFACINX
5494: ldy #>bFACINX
5495: sta zADRAY1
5496: sty zADRAY1 + 1
5497: ldx #END_COPY_OF_CHRGET - COPY_OF_CHRGET - 1
5498: LE3E2: lda COPY_OF_CHRGET,x
5499: sta zCHRGET,x
5500: dex
5501: bpl LE3E2
5502: lda #$03
5503: sta zFOUR6
5504: lda #0
5505: sta zBITS
5506: sta z13
5507: sta zLASTPT + 1
5508: ldx #1
5509: stx lBUF - 3
5510: stx lBUF - 4
5511: ldx #zTEMPST
5512: stx zTEMPPT
5513: sec
5514: jsr kMEMBOT
5515: stx zTXTTAB
5516: sty zTXTTAB + 1
5517: sec
5518: jsr kMEMTOP
5519: stx zMEMSIZ
5520: sty zMEMSIZ + 1
5521: stx zFRETOP
5522: sty zFRETOP + 1
5523: ldy #0
5524: tya
5525: sta (zTXTTAB),y
5526: inc zTXTTAB
5527: bne LE421
5528: inc zTXTTAB + 1
5529: LE421: rts
5530: LE422: lda zTXTTAB
5531: ldy zTXTTAB + 1
5532: jsr bREASON
5533: lda #<LE473
5534: ldy #>LE473
5535: .if CompileComputer = C64_4064
5536: jmp LE441
5537: .else
5538: jsr bSTROUT
5539: .endif
5540: lda zMEMSIZ
5541: sec
5542: sbc zTXTTAB
5543: tax
5544: lda zMEMSIZ + 1
5545: sbc zTXTTAB + 1
5546: jsr LBDCD
5547: lda #<LE460
5548: ldy #>LE460
5549: LE441: jsr bSTROUT
5550: jmp LA644
5551:
5552: .if CompileComputer < C64_GENERAL
5553:
5554: LE460:
5555: .byte " BYTES FREE",$0D,$00
5556:
5557: LE473: .byte $93
5558: .byte "**** CBM BASIC V2 ****"
5559: .byte $0D,$00
5560: .endif
5561:
5562: LE447:
5563: .if CompileComputer >= C64_GENERAL
5564: .ifdef JIFFY
5565: .addr JDLF763
5566: .else
5567: .addr PatchErrorOut
5568: .endif
5569: .else
5570: .addr ErrorOut
5571: .endif
5572:
5573: .if CompileComputer = C64_GS
5574: .addr C64GS_Init
5575: .else
5576: .addr IMAIN
5577: .endif
5578:
5579: .ifdef JIFFY
5580: .addr LEA64
5581: .else
5582: .addr LA57C
5583: .endif
5584: .addr LA71A
5585: .addr LA7E4
5586: .addr LAE86
5587: END_LE447:
5588:
5589: LE453: ldx #END_LE447 - LE447 - 1
5590: LE455: lda LE447,x
5591: sta lIERROR,x
5592: dex
5593: bpl LE455
5594: rts
5595:
5596: .if CompileComputer >= C64_GENERAL
5597: .byte $00
5598:
5599:
5600: LE460:
5601: .byte " BASIC BYTES FREE",$0D,$00
5602:
5603: LE473: .byte $93
5604:
5605: .ifdef JIFFY
5606: .byte $0D," JIFFYDOS V6.01 (C)1989 CMD "
5607: .byte $0D,$0D
5608: .byte " C-64 BASIC V2 ",$00
5609: .elseif CompileComputer = C64_SX64
5610: .byte $0D," ***** SX-64 BASIC V2.0 *****"
5611: .byte $0D,$0D
5612: .byte " 64K RAM SYSTEM ",$00
5613: .elseif CompileComputer = C64_4064
5614: .byte $0D," **** COMMODORE 4064 BASIC V2.0 ****"
5615: .byte $0D,$0D,$00
5616: .byte " "
5617: .elseif CompileComputer >= C64_GENERAL
5618: .byte $0D," **** COMMODORE 64 BASIC V2 ****"
5619: .byte $0D,$0D
5620: .byte " 64K RAM SYSTEM ",$00
5621: .endif
5622: .endif
5623:
5624: .if CompileComputer < C64_GENERAL
5625:
5626: LE37B:
5627: jsr kCLRCHN
5628: lda #0
5629: sta z13
5630: jsr LA67A
5631: cli
5632: jmp bREADY
5633:
5634: .byte CHECKSUM_E475
5635:
5636: .if CompileComputer >= VIC20_06
5637: LE476:
5638: jsr bLINKPRG
5639: jmp LA677
5640: .endif
5641: .endif
5642:
5643:
5644: .segment "MEM_KERNAL_ZP": zeropage
5645:
5646: zSTATUS: .res 1
5647:
5648: zSTKEY: .res 1
5649: zSVXT: .res 1
5650: zVERCKK: .res 1
5651: zC3PO: .res 1
5652:
5653:
5654:
5655:
5656:
5657:
5658:
5659:
5660:
5661:
5662:
5663:
5664:
5665:
5666: zBSOUR: .res 1
5667: zSYNO: .res 1
5668: zTEMPX: .res 1
5669: zLDTND: .res 1
5670: zDFLTN: .res 1
5671: zDFLTO: .res 1
5672: zPRTY: .res 1
5673: zDPSW: .res 1
5674: zNSGFLG: .res 1
5675:
5676:
5677:
5678:
5679: zPTR1: .res 1
5680: zPTR2: .res 1
5681: zTIME: .res 3
5682: zTSFCNT: .res 1
5683: zTBTCNT: .res 1
5684: zCNTDN: .res 1
5685: zBUFPNT: .res 1
5686: zINBIT: .res 1
5687: zBITC1: .res 1
5688: zRINONE: .res 1
5689: zRIDATA: .res 1
5690: zRIPRTY: .res 1
5691: zSAL: .res 2
5692: zEAL: .res 2
5693: zCMPO: .res 2
5694: zTAPE1: .res 2
5695: zBITTS: .res 1
5696: zNXTBIT: .res 1
5697: zRODATA: .res 1
5698: zFNLEN: .res 1
5699: zLA: .res 1
5700: zSA: .res 1
5701: zFA: .res 1
5702: zFNADR: .res 2
5703: zROPRTY: .res 1
5704: zFSBLK: .res 1
5705: zMYCH: .res 1
5706: zCAS1: .res 1
5707: zSTAL: .res 2
5708: zMEMUSS: .res 2
5709: zLSTX: .res 1
5710: zNDX: .res 1
5711: zRVS: .res 1
5712: zINDX: .res 1
5713: zLXSP: .res 1
5714: zTEMP_zPNTR: .res 1
5715: zSFDX: .res 1
5716: zBLNSW: .res 1
5717: zBLNCT: .res 1
5718: zGDBLN: .res 1
5719: zBLNON: .res 1
5720: zCRSW: .res 1
5721: zPNT: .res 2
5722: zPNTR: .res 1
5723: zQTSW: .res 1
5724: zLNMX: .res 1
5725: zTBLX: .res 1
5726: zSCHAR: .res 1
5727: zINSRT: .res 1
5728: zLDTB1: .res 26
5729:
5730:
5731:
5732:
5733:
5734:
5735: zUSER: .res 2
5736: zKEYTAB: .res 2
5737: zRIBUF: .res 2
5738: zROBUF: .res 2
5739: zFREKXP: .res 4
5740:
5741: .segment "MEM_KERNAL_DATA_0200"
5742:
5743:
5744:
5745:
5746:
5747: lLAT_Size := 10
5748: lLAT: .res lLAT_Size
5749: lFAT: .res lLAT_Size
5750: lSAT: .res lLAT_Size
5751:
5752: lKEYD: .res 10
5753: lMEMSTR: .res 2
5754: lMEMSIZ: .res 2
5755: lTIMOUT: .res 1
5756: lCOLOR: .res 1
5757: lGDCOL: .res 1
5758: lHIBASE: .res 1
5759: lXMAX: .res 1
5760: lRPTFLG: .res 1
5761:
5762:
5763:
5764:
5765:
5766:
5767:
5768: lKOUNT: .res 1
5769:
5770: lDELAY: .res 1
5771:
5772: lSHFLAG: .res 1
5773:
5774:
5775:
5776:
5777: lSHFLAG_SHIFT := $01
5778: lSHFLAG_CBM := $02
5779: lSHFLAG_CTRL := $04
5780:
5781: lLSTSHF: .res 1
5782: lKEYLOG: .res 2
5783: lMODE: .res 1
5784:
5785:
5786:
5787:
5788:
5789:
5790:
5791:
5792:
5793: lAUTODN: .res 1
5794:
5795:
5796:
5797:
5798:
5799:
5800:
5801:
5802:
5803: lM51CTR: .res 1
5804: lM51CDR: .res 1
5805: lM51AJB: .res 2
5806: lRSSTAT: .res 1
5807: lBITNUM: .res 1
5808: lBAUDOF: .res 2
5809: lRIDBE: .res 1
5810: lRIDBS: .res 1
5811: lRODBS: .res 1
5812: lRODBE: .res 1
5813: lIRQTMP: .res 2
5814:
5815: .if CompileComputer >= C64_GENERAL
5816:
5817: lENABL: .res 1
5818: lTODSNS: .res 1
5819: lTRDTMP: .res 1
5820: lTD1IRQ: .res 1
5821: lTLNIDX: .res 1
5822: lTVSFLG: .res 1
5823:
5824: .else
5825:
5826: lTLNIDX := $00F2
5827:
5828: .endif
5829:
5830: .segment "MEM_KERNAL_DATA_0300"
5831:
5832: lCINV: .res 2
5833: lCNBINV: .res 2
5834: lNMINV: .res 2
5835: lIOPEN: .res 2
5836: lICLOSE: .res 2
5837: lICHKIN: .res 2
5838: lICKOUT: .res 2
5839: lICLRCH: .res 2
5840: lIBASIN: .res 2
5841: lIBSOUT: .res 2
5842: lISTOP: .res 2
5843: lIGETIN: .res 2
5844: lICLALL: .res 2
5845: lUSRCMD: .res 2
5846: lILOAD: .res 2
5847: lISAVE: .res 2
5848:
5849: .res 8
5850:
5851: lTBUFFR_SIZE := $00C0
5852: lTBUFFR: .res lTBUFFR_SIZE
5853:
5854: .if CompileComputer >= C64_GENERAL
5855: lVIDEORAM := $0400
5856: .if .defined(C64JAPAN)
5857: lBASICRAM := $1000
5858: .else
5859: lBASICRAM := $0800
5860: .endif
5861: .endif
5862:
5863: lVIDEORAM_SIZE := $03FF
5864:
5865: .if CompileComputer = VIC20_02
5866: zMEMUSS_2 := zC3PO
5867: .else
5868: zMEMUSS_2 := zMEMUSS
5869: .endif
5870:
5871:
5872: .macro LOAD_OVERWRITE_START_ADDRESS
5873: txa
5874: bne :+
5875: lda zMEMUSS
5876: sta zEAL
5877: lda zMEMUSS + 1
5878: sta zEAL + 1
5879: :
5880:
5881: .endmacro
5882:
5883: .macro FILEIO_PATCH_CLOSE_TAPE
5884:
5885: jsr TapeWriteCompleteBuffer
5886: bcc FileIoPatch_NoError
5887:
5888: pla
5889: lda #$00
5890:
5891: .endmacro
5892:
5893:
5894:
5895:
5896: .macro IEC_GET_DATA_INTO_CARRY
5897: .if CompileComputer < C64_GENERAL
5898: lsr a
5899: .endif
5900: .endmacro
5901:
5902: .macro IEC_REG__DATA_IN_INTO_CARRY
5903: .if CompileComputer >= C64_GENERAL
5904: asl a
5905: .else
5906: lsr a
5907: lsr a
5908: .endif
5909: .endmacro
5910:
5911: .macro IEC_REG__CLOCK_IN_INTO_CARRY
5912: .if CompileComputer >= C64_GENERAL
5913: .error IEC_REG__CLOCK_IN_INTO_CARRY not defined for C64!
5914: .else
5915: lsr a
5916: .endif
5917: .endmacro
5918:
5919: .segment "INIT"
5920: .byte VERSION_E4AC
5921:
5922: .if CompileComputer >= C64_02
5923:
5924: LE4AD: pha
5925: jsr kCHKOUT
5926: tax
5927: pla
5928: bcc LE4B6
5929: txa
5930: LE4B6: rts
5931:
5932: .endif
5933:
5934: .if CompileComputer = C64_4064
5935:
5936: .segment "KERNALPATCH_4064"
5937:
5938: LE4C8: bit lCOLOR
5939: bmi LE4D7
5940: lda #COL_BLACK
5941: ldx #(VICII_O_Spr7Col - VICII_O_BorderCol)
5942: LE4D1: sta VIC + VICII_O_BorderCol,x
5943: dex
5944: bpl LE4D1
5945: LE4D7: jmp iSCNKEY
5946:
5947: .elseif CompileComputer >= C64_03
5948:
5949: .ifdef JIFFY
5950: JDLE4B7:
5951: jsr LE453
5952: lda #<$F672
5953: sta zCMPO
5954: lda #>$F672
5955: sta zCMPO + 1
5956:
5957: JDLE4C2:
5958: inx
5959: stx zPRTY
5960: rts
5961:
5962: JDLE4C6:
5963: lda #$6F
5964: jsr $F0E4
5965: jsr kCHRIN
5966: cmp #$35
5967: rts
5968: .endif
5969:
5970:
5971: .segment "KERNALPATCH_03"
5972:
5973: LE4D3: sta zRINONE
5974: lda #$01
5975: sta zRIPRTY
5976: rts
5977: .endif
5978:
5979: .if CompileComputer >= C64_02
5980:
5981:
5982: .segment "KERNALPATCH_02"
5983:
5984: Patch_StoreColor:
5985: .if CompileComputer >= C64_03 .AND CompileComputer <> C64_4064
5986:
5987: lda lCOLOR
5988: .else
5989: lda VIC + VICII_O_BackgCol0
5990: .endif
5991: sta (zUSER),y
5992: rts
5993:
5994:
5995:
5996:
5997:
5998:
5999:
6000:
6001:
6002:
6003:
6004:
6005:
6006:
6007: TapeKeyOrTimeout:
6008: adc #2
6009:
6010:
6011: @Loop:
6012: ldy zSTKEY
6013:
6014: iny
6015: bne @Ret
6016:
6017: cmp zTIME + 1
6018: bne @Loop
6019: @Ret:
6020: rts
6021:
6022:
6023: LE4EC:
6024: .word $2619
6025: .word $1944
6026: .word $111A
6027: .word $0DE8
6028: .word $0C70
6029: .word $0606
6030: .word $02D1
6031: .word $0137
6032: .word $00AE
6033: .word $0069
6034: .endif
6035:
6036:
6037: .segment "KERNAL"
6038:
6039:
6040:
6041:
6042:
6043:
6044:
6045:
6046:
6047:
6048:
6049:
6050:
6051:
6052:
6053:
6054:
6055:
6056:
6057:
6058:
6059:
6060:
6061:
6062:
6063:
6064:
6065:
6066:
6067:
6068:
6069:
6070:
6071:
6072:
6073:
6074:
6075:
6076:
6077:
6078:
6079:
6080:
6081:
6082:
6083: iIOBASE:
6084:
6085:
6086:
6087:
6088: ldx #<IOBASE
6089: ldy #>IOBASE
6090: rts
6091:
6092:
6093:
6094:
6095:
6096:
6097:
6098:
6099:
6100:
6101:
6102:
6103:
6104:
6105:
6106:
6107:
6108:
6109:
6110:
6111:
6112:
6113:
6114:
6115:
6116:
6117:
6118:
6119:
6120: iSCREEN:
6121:
6122:
6123: ldx #EDITOR_COLS
6124: ldy #EDITOR_ROWS
6125: rts
6126:
6127:
6128:
6129:
6130:
6131:
6132:
6133:
6134:
6135:
6136:
6137:
6138:
6139:
6140:
6141:
6142:
6143:
6144:
6145:
6146:
6147:
6148:
6149:
6150:
6151:
6152:
6153:
6154:
6155:
6156:
6157:
6158:
6159:
6160:
6161:
6162:
6163:
6164:
6165:
6166:
6167:
6168:
6169:
6170: iPLOT:
6171: bcs iPLOTReadOnly
6172:
6173: JDLE50C:
6174: stx zTBLX
6175: sty zPNTR
6176:
6177: jsr SET_CURSORPOS
6178:
6179: iPLOTReadOnly:
6180: ldx zTBLX
6181: ldy zPNTR
6182:
6183: rts
6184:
6185:
6186:
6187:
6188:
6189:
6190:
6191:
6192:
6193:
6194:
6195:
6196:
6197:
6198:
6199:
6200:
6201:
6202:
6203:
6204:
6205:
6206:
6207:
6208:
6209:
6210:
6211: iCINT: jsr CLRCHN_AND_VIC_DEFAULTS
6212:
6213: .if CompileComputer < C64_GENERAL
6214:
6215:
6216:
6217:
6218:
6219:
6220:
6221:
6222:
6223:
6224:
6225:
6226:
6227:
6228:
6229:
6230:
6231:
6232:
6233:
6234: lda lHIBASE
6235: and #~$02
6236:
6237:
6238: asl a
6239: asl a
6240:
6241:
6242:
6243: ora #$80
6244:
6245:
6246:
6247:
6248: sta VIC + VICI_O_MemoryLocations
6249:
6250: lda lHIBASE
6251: and #$02
6252: beq @NoSetBit9
6253:
6254:
6255: lda #VICI_B_VideoColumns_ScreenMemoryB9
6256: ora VIC + VICI_O_VideoColumns
6257: sta VIC + VICI_O_VideoColumns
6258:
6259: @NoSetBit9:
6260:
6261: .endif
6262:
6263: lda #$00
6264: sta lMODE
6265:
6266: sta zBLNON
6267:
6268: lda #<CHECK_SHIFT_CTRL_CBM
6269: sta lKEYLOG
6270: lda #>CHECK_SHIFT_CTRL_CBM
6271: sta lKEYLOG + 1
6272:
6273: lda #10
6274: sta lXMAX
6275: sta lDELAY
6276:
6277: lda #DEFAULT_COLOR
6278: sta lCOLOR
6279:
6280: lda #$04
6281: sta lKOUNT
6282:
6283: lda #$0C
6284: sta zBLNCT
6285: sta zBLNSW
6286:
6287:
6288:
6289: ClearScreen:
6290: lda lHIBASE
6291: ora #$80
6292: tay
6293: lda #$00
6294: tax
6295:
6296: @Next: sty zLDTB1,x
6297:
6298:
6299:
6300: clc
6301: adc #EDITOR_COLS
6302: bcc @NoHighByte
6303: iny
6304:
6305: @NoHighByte:
6306: inx
6307: cpx #EDITOR_ROWS + 1
6308: bne @Next
6309:
6310: lda #$FF
6311: sta zLDTB1,x
6312:
6313:
6314:
6315: ldx #EDITOR_ROWS - 1
6316: @NextLine:
6317: jsr EraseScreenRow
6318: dex
6319: bpl @NextLine
6320:
6321: CURSOR_HOME:
6322:
6323:
6324: ldy #0
6325: sty zPNTR
6326: sty zTBLX
6327:
6328: SET_CURSORPOS:
6329:
6330:
6331:
6332:
6333:
6334:
6335: ldx zTBLX
6336: lda zPNTR
6337:
6338: @AddLine:
6339: ldy zLDTB1,x
6340: bmi @StandaloneLine
6341:
6342:
6343: clc
6344: adc #EDITOR_COLS
6345: sta zPNTR
6346: dex
6347: bpl @AddLine
6348:
6349:
6350: @StandaloneLine:
6351:
6352: .if CompileComputer >= C64_03 .or .defined(C64JAPAN)
6353: jsr CalculateScreenPointerFromRowNumber
6354:
6355: .else
6356: lda zLDTB1,x
6357: and #>lVIDEORAM_SIZE
6358: ora lHIBASE
6359: sta zPNT + 1
6360:
6361: lda SCREEN_LOWBYTE,x
6362: sta zPNT
6363:
6364: .endif
6365:
6366:
6367:
6368:
6369: lda #EDITOR_COLS - 1
6370:
6371: inx
6372:
6373: @Loop: ldy zLDTB1,x
6374: bmi @StoreLineLength
6375:
6376: clc
6377: adc #EDITOR_COLS
6378:
6379: inx
6380: bpl @Loop
6381:
6382:
6383: @StoreLineLength:
6384: sta zLNMX
6385:
6386: .if CompileComputer >= C64_03 .or .defined(C64JAPAN)
6387:
6388:
6389:
6390:
6391:
6392:
6393:
6394:
6395: jmp UpdateColorRAMPointerToVideoramPointer
6396:
6397:
6398:
6399:
6400:
6401:
6402: Patch_CursorOneRowUp:
6403: cpx zLXSP
6404: beq @Ret
6405: jmp CursorOneRowUp
6406: @Ret: rts
6407:
6408: nop
6409:
6410: .else
6411: rts
6412: .endif
6413:
6414:
6415:
6416:
6417: jsr CLRCHN_AND_VIC_DEFAULTS
6418: jmp CURSOR_HOME
6419:
6420:
6421: CLRCHN_AND_VIC_DEFAULTS:
6422:
6423:
6424:
6425:
6426: lda #FILE_SCREEN
6427: sta zDFLTO
6428: lda #FILE_KEYBOARD
6429: sta zDFLTN
6430:
6431: SET_VIC_DEFAULTS:
6432:
6433:
6434:
6435:
6436:
6437:
6438: ldx #END_VIC_DEFAULTS - VIC_DEFAULTS + 1
6439: @Loop: lda VIC_DEFAULTS - 1,x
6440: sta VIC - 1,x
6441: dex
6442: bne @Loop
6443: rts
6444:
6445: GETIN_KEYB:
6446:
6447:
6448:
6449:
6450:
6451:
6452:
6453:
6454:
6455:
6456:
6457:
6458: ldy lKEYD
6459:
6460:
6461:
6462: ldx #0
6463: @Loop: lda lKEYD + 1,x
6464: sta lKEYD,x
6465: inx
6466: cpx zNDX
6467: bne @Loop
6468:
6469: dec zNDX
6470:
6471: tya
6472:
6473: cli
6474: clc
6475: rts
6476:
6477: OutputCharacterAndWaitForKeyPress:
6478: jsr CHROUT_SCREEN
6479:
6480: WaitForKeyPress:
6481: lda zNDX
6482: sta zBLNSW
6483: sta lAUTODN
6484:
6485: beq WaitForKeyPress
6486:
6487:
6488:
6489:
6490:
6491: sei
6492: lda zBLNON
6493: beq @CursorNotVisible
6494:
6495:
6496:
6497: lda zGDBLN
6498: ldx lGDCOL
6499:
6500: ldy #0
6501: sty zBLNON
6502:
6503: jsr StoreCharacterOnScreenAndDisableBlinking
6504:
6505: @CursorNotVisible:
6506:
6507: .ifdef JIFFY
6508: jsr JDLF9E5
6509: .else
6510: jsr GETIN_KEYB
6511: .endif
6512: cmp #KEY_SHIFTRUN
6513: bne NoShiftRunStop
6514:
6515:
6516:
6517:
6518:
6519:
6520:
6521:
6522: ldx #END_TEXT_SHIFTRUNSTOP - TEXT_SHIFTRUNSTOP
6523: sei
6524: stx zNDX
6525:
6526: @ShiftRunStop:
6527: lda TEXT_SHIFTRUNSTOP - 1,x
6528: sta lKEYD - 1,x
6529: dex
6530: bne @ShiftRunStop
6531: beq WaitForKeyPress
6532:
6533:
6534: NoShiftRunStop:
6535: cmp #ASC_CR
6536: bne OutputCharacterAndWaitForKeyPress
6537:
6538:
6539:
6540:
6541: ldy zLNMX
6542: sty zCRSW
6543:
6544: @CheckSpaceNext:
6545: lda (zPNT),y
6546: cmp #' '
6547: bne @NoSpace
6548: dey
6549: bne @CheckSpaceNext
6550:
6551: @NoSpace:
6552: iny
6553: sty zINDX
6554: ldy #0
6555: sty lAUTODN
6556: sty zPNTR
6557: sty zQTSW
6558: lda zLXSP
6559: bmi BASIN_KEYB_PROCESS_KEY
6560:
6561: ldx zTBLX
6562:
6563:
6564:
6565: .if CompileComputer >= C64_03 .or .defined(C64JAPAN)
6566:
6567:
6568:
6569:
6570: jsr Patch_CursorOneRowUp
6571: .else
6572: jsr CursorOneRowUp
6573: .endif
6574:
6575:
6576:
6577: cpx zLXSP
6578: bne BASIN_KEYB_PROCESS_KEY
6579:
6580: .if CompileComputer < C64_GENERAL
6581: bne BASIN_KEYB_PROCESS_KEY
6582: .endif
6583:
6584: lda zTEMP_zPNTR
6585: sta zPNTR
6586: cmp zINDX
6587: bcc BASIN_KEYB_PROCESS_KEY
6588: bcs BASIN_KEYB_END_LINE
6589:
6590:
6591: BASIN_KEYB:
6592:
6593:
6594:
6595: tya
6596: pha
6597: txa
6598: pha
6599:
6600: lda zCRSW
6601:
6602:
6603: beq WaitForKeyPress
6604:
6605: BASIN_KEYB_PROCESS_KEY:
6606: ldy zPNTR
6607: lda (zPNT),y
6608:
6609: .if CompileComputer >= C64_GENERAL
6610: .elseif CompileComputer >= VIC20_06
6611:
6612:
6613: FillNOP 23
6614:
6615: .else
6616:
6617:
6618:
6619:
6620:
6621: ldx lMODE
6622: beq @End
6623:
6624: ldx #SpecialScreenCodeHandleTable_END - SpecialScreenCodeHandleTable - 2
6625: @FindChar:
6626: cmp SpecialScreenCodeHandleTable,x
6627: beq @FoundCharacter
6628: dex
6629: dex
6630: bpl @FindChar
6631: bmi @End
6632:
6633:
6634: @FoundCharacter:
6635: lda SpecialScreenCodeHandleTable + 1,x
6636: bne @ProceedToNextScreenLocation
6637:
6638:
6639: @End:
6640:
6641: .endif
6642:
6643:
6644:
6645:
6646:
6647:
6648:
6649:
6650:
6651:
6652:
6653:
6654: sta zSCHAR
6655:
6656: and #$3F
6657: asl zSCHAR
6658: bit zSCHAR
6659:
6660:
6661:
6662:
6663:
6664:
6665: bpl @DoNotSetBit7
6666:
6667: ora #$80
6668:
6669: @DoNotSetBit7:
6670: bcc @Process0x00_To_0x7F
6671:
6672: ldx zQTSW
6673: bne @ProceedToNextScreenLocation
6674:
6675: @Process0x00_To_0x7F:
6676: bvs @ProceedToNextScreenLocation
6677: ora #$40
6678:
6679:
6680:
6681:
6682:
6683:
6684:
6685: @ProceedToNextScreenLocation:
6686: inc zPNTR
6687:
6688: jsr CheckQuote
6689:
6690: cpy zINDX
6691: bne BASIN_KEYB_QUIT
6692:
6693:
6694:
6695:
6696: BASIN_KEYB_END_LINE:
6697: lda #0
6698: sta zCRSW
6699: lda #ASC_CR
6700:
6701: ldx zDFLTN
6702: cpx #FILE_SCREEN
6703: beq @OutputCharacter
6704:
6705: ldx zDFLTO
6706: cpx #FILE_SCREEN
6707: beq @QuitWithCR
6708:
6709:
6710:
6711:
6712: @OutputCharacter:
6713: jsr CHROUT_SCREEN
6714:
6715: @QuitWithCR:
6716: lda #ASC_CR
6717:
6718: BASIN_KEYB_QUIT:
6719: sta zSCHAR
6720:
6721:
6722: pla
6723: tax
6724: pla
6725: tay
6726:
6727: lda zSCHAR
6728: cmp #ASC_PI
6729: bne @ClcRts
6730: lda #TokPi
6731: @ClcRts:
6732: clc
6733: rts
6734:
6735:
6736: CheckQuote:
6737: cmp #'"'
6738: bne @Rts
6739:
6740:
6741: lda zQTSW
6742: eor #$01
6743: sta zQTSW
6744:
6745: lda #'"'
6746: @Rts: rts
6747:
6748:
6749:
6750:
6751: LE691: ora #$40
6752:
6753: CHROUT_SCREEN_OUTPUT_WITH_TEST_RVS:
6754: ldx zRVS
6755: beq CHROUT_OUTPUT_SCREEN_IN_NORMAL
6756:
6757: CHROUT_SCREEN_OUTPUT_IN_RVS:
6758: ora #$80
6759:
6760: CHROUT_OUTPUT_SCREEN_IN_NORMAL:
6761: ldx zINSRT
6762: beq @NoInsertMode
6763: dec zINSRT
6764:
6765: @NoInsertMode:
6766: ldx lCOLOR
6767: jsr StoreCharacterOnScreenAndDisableBlinking
6768: jsr MoveCursorRightAfterOutput
6769:
6770: CHROUT_SCREEN_END:
6771: pla
6772: tay
6773:
6774: lda zINSRT
6775: beq @DontStopQuotationMode
6776: lsr zQTSW
6777: @DontStopQuotationMode:
6778: pla
6779: tax
6780:
6781: pla
6782: clc
6783: cli
6784: rts
6785:
6786:
6787: MoveCursorRightAfterOutput:
6788: jsr AdjustCursorRowBeforeMovingRight
6789: inc zPNTR
6790: lda zLNMX
6791: cmp zPNTR
6792: bcs EditorRts
6793: cmp #(EDITOR_MAX_COMBINED_ROWS * EDITOR_COLS) - 1
6794: beq SetCursorToTheBeginningOfTheNextLine
6795:
6796: lda lAUTODN
6797: beq @CombineRows
6798: jmp LE967
6799:
6800:
6801: @CombineRows:
6802: ldx zTBLX
6803: cpx #EDITOR_ROWS
6804: bcc LogicallyCombineTwoRows
6805: jsr LE8EA
6806: dec zTBLX
6807: ldx zTBLX
6808:
6809: LogicallyCombineTwoRows:
6810: asl zLDTB1,x
6811: lsr zLDTB1,x
6812:
6813: .macro EDITOR_PATCH_LogicallyCombineTwoRows_FIX
6814:
6815:
6816:
6817:
6818:
6819:
6820:
6821: inx
6822: lda zLDTB1,x
6823: ora #$80
6824: sta zLDTB1,x
6825: dex
6826: .endmacro
6827:
6828: .macro EDITOR_PATCH_LogicallyCombineTwoRows_COMMON
6829:
6830:
6831: lda zLNMX
6832: clc
6833: .endmacro
6834:
6835:
6836: .if CompileComputer >= C64_GENERAL
6837: EDITOR_PATCH_LogicallyCombineTwoRows_FIX
6838: EDITOR_PATCH_LogicallyCombineTwoRows_COMMON
6839: .elseif CompileComputer >= VIC20_06
6840:
6841:
6842: jmp EditorPatchLogicallyCombineTwoRows
6843: EditorPatchLogicallyCombineTwoRows_Return:
6844:
6845: .else
6846:
6847: EDITOR_PATCH_LogicallyCombineTwoRows_COMMON
6848: .endif
6849:
6850: adc #EDITOR_COLS
6851: sta zLNMX
6852:
6853: CursorOneRowUp:
6854:
6855:
6856:
6857:
6858: lda zLDTB1,x
6859: bmi @NotCombined
6860: dex
6861: bne CursorOneRowUp
6862:
6863: @NotCombined:
6864: jmp CalculateScreenPointerFromRowNumber
6865:
6866:
6867: SetCursorToTheBeginningOfTheNextLine:
6868: dec zTBLX
6869: jsr GoDownOneVirtualRow
6870: lda #0
6871: sta zPNTR
6872: EditorRts:
6873: rts
6874:
6875:
6876:
6877:
6878:
6879:
6880:
6881:
6882:
6883:
6884:
6885:
6886:
6887:
6888:
6889: CHROUT_SCREEN_WrapAroundToPreviousRow:
6890: ldx zTBLX
6891: bne @CanGoBack
6892:
6893:
6894:
6895:
6896: stx zPNTR
6897:
6898:
6899:
6900:
6901:
6902: pla
6903: pla
6904:
6905: bne CHROUT_SCREEN_END
6906:
6907:
6908: @CanGoBack:
6909: dex
6910: stx zTBLX
6911:
6912: jsr SET_CURSORPOS
6913:
6914:
6915: ldy zLNMX
6916: sty zPNTR
6917: rts
6918:
6919:
6920:
6921:
6922:
6923: CHROUT_SCREEN:
6924: pha
6925: sta zSCHAR
6926:
6927:
6928: txa
6929: pha
6930: tya
6931: pha
6932:
6933: lda #$00
6934: sta zCRSW
6935:
6936: ldy zPNTR
6937: lda zSCHAR
6938: bpl @PositiveChar
6939: jmp @NegativeChar
6940:
6941:
6942: @PositiveChar:
6943: cmp #ASC_CR
6944: bne @NoCR
6945: jmp CHROUT_SCREEN_CR
6946:
6947: @NoCR:
6948:
6949:
6950:
6951:
6952:
6953:
6954:
6955: cmp #$20
6956: bcc @TestControlCode
6957:
6958: cmp #$60
6959: bcc @Convert0x20_0x60
6960: and #~$20
6961: bne @CheckQuoteAndOutput
6962:
6963:
6964: @Convert0x20_0x60:
6965: and #$3F
6966:
6967: @CheckQuoteAndOutput:
6968: jsr CheckQuote
6969: jmp CHROUT_SCREEN_OUTPUT_WITH_TEST_RVS
6970:
6971:
6972: @TestControlCode:
6973: ldx zINSRT
6974: beq @ProcessControlCode
6975: jmp CHROUT_SCREEN_OUTPUT_IN_RVS
6976:
6977:
6978: @ProcessControlCode:
6979: cmp #ASC_INSDEL
6980: bne @NoINSDEL
6981:
6982: tya
6983: bne @NotFirstColumn
6984:
6985: jsr CHROUT_SCREEN_WrapAroundToPreviousRow
6986:
6987: jmp @AddBlankAtCurrentPosition
6988:
6989:
6990: @NotFirstColumn:
6991: jsr AdjustCursorRowBeforeMovingLeft
6992:
6993:
6994:
6995: dey
6996: sty zPNTR
6997: jsr UpdateColorRAMPointerToVideoramPointer
6998:
6999:
7000:
7001: @MoveLoop:
7002: iny
7003: lda (zPNT),y
7004: dey
7005: sta (zPNT),y
7006:
7007: iny
7008: lda (zUSER),y
7009: dey
7010: sta (zUSER),y
7011:
7012: iny
7013: cpy zLNMX
7014: bne @MoveLoop
7015:
7016:
7017:
7018: @AddBlankAtCurrentPosition:
7019: lda #' '
7020: sta (zPNT),y
7021: lda lCOLOR
7022: sta (zUSER),y
7023: bpl @End2
7024:
7025:
7026: @NoINSDEL:
7027: ldx zQTSW
7028: beq @NoQuotationMode
7029: jmp CHROUT_SCREEN_OUTPUT_IN_RVS
7030:
7031:
7032: @NoQuotationMode:
7033: cmp #ASC_RVS
7034: bne @NotReverse
7035: sta zRVS
7036:
7037: @NotReverse:
7038: cmp #ASC_HOME
7039: bne @NoCrsrHome
7040: jsr CURSOR_HOME
7041:
7042: @NoCrsrHome:
7043: cmp #ASC_CURSORLEFTRIGHT
7044: bne @NoCrsrLeftRight
7045:
7046: iny
7047: jsr AdjustCursorRowBeforeMovingRight
7048: sty zPNTR
7049:
7050: dey
7051: cpy zLNMX
7052: bcc @End
7053:
7054:
7055:
7056: dec zTBLX
7057:
7058:
7059:
7060: jsr GoDownOneVirtualRow
7061: ldy #0
7062: @StoreColAndEnd:
7063: sty zPNTR
7064:
7065: @End: jmp CHROUT_SCREEN_END
7066:
7067:
7068: @NoCrsrLeftRight:
7069: cmp #ASC_CURSORUPDOWN
7070: bne @NoCrsrUpDown
7071:
7072:
7073:
7074:
7075:
7076:
7077: clc
7078: tya
7079: adc #EDITOR_COLS
7080: tay
7081:
7082:
7083: inc zTBLX
7084: cmp zLNMX
7085: bcc @StoreColAndEnd
7086: beq @StoreColAndEnd
7087: dec zTBLX
7088:
7089:
7090:
7091:
7092:
7093:
7094: @Normalise:
7095:
7096:
7097:
7098:
7099: sbc #EDITOR_COLS
7100: bcc @GoDown
7101: sta zPNTR
7102: bne @Normalise
7103:
7104: @GoDown:
7105: jsr GoDownOneVirtualRow
7106: @End2:
7107: jmp CHROUT_SCREEN_END
7108:
7109: @NoCrsrUpDown:
7110: jsr EditorCheckColorCodeAndSetColor
7111:
7112: .if CompileComputer >= VIC20_06
7113: jmp EditorCheckForAscLowercase
7114: .else
7115: jmp CHROUT_SCREEN_END
7116: .endif
7117:
7118:
7119: @NegativeChar:
7120:
7121: .if CompileComputer >= C64_GENERAL
7122:
7123: .elseif CompileComputer < VIC20_06
7124:
7125:
7126:
7127:
7128:
7129:
7130:
7131: ldx lMODE
7132: beq @LE815
7133:
7134: ldx #$31
7135: @LE807: cmp CHROUT_REPLACEMENT_TABLE,x
7136: beq @LE812
7137: dex
7138: dex
7139: bpl @LE807
7140: bmi @LE815
7141: @LE812: lda CHROUT_REPLACEMENT_TABLE - 1,x
7142: .else
7143:
7144:
7145: FillNOP 21
7146:
7147: .endif
7148:
7149: @LE815:
7150:
7151: and #$7F
7152: cmp #TokPi - $80
7153: bne @LE7DC
7154: .if .defined(C64JAPAN)
7155: lda #ASC_PI - $40
7156: .else
7157: lda #ASC_PI - $80
7158: .endif
7159: @LE7DC:
7160: .if CompileComputer >= C64_GENERAL
7161:
7162: .elseif CompileComputer >= VIC20_06
7163: .repeat 6
7164: nop
7165: .endrep
7166: .else
7167: cmp #$04
7168: bne @LE823
7169: lda #$7F
7170: .endif
7171:
7172: @LE823:
7173: cmp #' '
7174: bcc @LE7E3
7175: jmp LE691
7176:
7177:
7178: @LE7E3: cmp #ASC_CR
7179: bne @LE7EA
7180: jmp CHROUT_SCREEN_CR
7181:
7182: @LE7EA: ldx zQTSW
7183: bne @LE82D
7184: cmp #ASC_INSDEL
7185: bne @LE829
7186: ldy zLNMX
7187: lda (zPNT),y
7188: cmp #' '
7189: bne @LE7FE
7190: cpy zPNTR
7191: bne @LE805
7192: @LE7FE: cpy #(EDITOR_MAX_COMBINED_ROWS * EDITOR_COLS) - 1
7193: beq @LE826
7194: jsr LE965
7195: @LE805: ldy zLNMX
7196: jsr UpdateColorRAMPointerToVideoramPointer
7197: @LE80A: dey
7198: lda (zPNT),y
7199: iny
7200: sta (zPNT),y
7201: dey
7202: lda (zUSER),y
7203: iny
7204: sta (zUSER),y
7205: dey
7206: cpy zPNTR
7207: bne @LE80A
7208: lda #' '
7209: sta (zPNT),y
7210: lda lCOLOR
7211: sta (zUSER),y
7212: inc zINSRT
7213: @LE826: jmp CHROUT_SCREEN_END
7214:
7215:
7216: @LE829: ldx zINSRT
7217: beq @LE832
7218: @LE82D: ora #$40
7219: jmp CHROUT_SCREEN_OUTPUT_IN_RVS
7220:
7221: @LE832: cmp #ASC_CURSORUPDOWN
7222: bne @LE84C
7223: ldx zTBLX
7224: beq @LE871
7225: dec zTBLX
7226: lda zPNTR
7227: sec
7228: sbc #EDITOR_COLS
7229: bcc @LE847
7230: sta zPNTR
7231: bpl @LE871
7232: @LE847: jsr SET_CURSORPOS
7233: bne @LE871
7234: @LE84C: cmp #ASC_RVS
7235: bne @LE854
7236: lda #$00
7237: sta zRVS
7238: @LE854: cmp #ASC_CURSORLEFTRIGHT
7239: bne @LE86A
7240: tya
7241: beq @LE864
7242: jsr AdjustCursorRowBeforeMovingLeft
7243: dey
7244: sty zPNTR
7245: jmp CHROUT_SCREEN_END
7246:
7247: @LE864: jsr CHROUT_SCREEN_WrapAroundToPreviousRow
7248: jmp CHROUT_SCREEN_END
7249: @LE86A: cmp #ASC_HOME
7250: bne @LE874
7251: jsr ClearScreen
7252: @LE871: jmp CHROUT_SCREEN_END
7253: @LE874: ora #$80
7254: jsr EditorCheckColorCodeAndSetColor
7255: .if CompileComputer >= VIC20_06
7256: jmp EditorCheckForAscUppercase
7257: .else
7258: jmp CHROUT_SCREEN_END
7259: .endif
7260:
7261:
7262: GoDownOneVirtualRow:
7263: lsr zLXSP
7264: ldx zTBLX
7265: @LE880: inx
7266: cpx #EDITOR_ROWS
7267: bne @LE888
7268: jsr LE8EA
7269: @LE888: lda zLDTB1,x
7270: bpl @LE880
7271: stx zTBLX
7272: jmp SET_CURSORPOS
7273:
7274: CHROUT_SCREEN_CR:
7275:
7276:
7277: ldx #$00
7278: stx zINSRT
7279: stx zRVS
7280: stx zQTSW
7281: stx zPNTR
7282:
7283: jsr GoDownOneVirtualRow
7284: jmp CHROUT_SCREEN_END
7285:
7286:
7287:
7288:
7289:
7290:
7291: AdjustCursorRowBeforeMovingLeft:
7292: ldx #EDITOR_MAX_COMBINED_ROWS
7293: lda #$00
7294: @Loop:
7295: cmp zPNTR
7296: beq @DecrementAndExit
7297: clc
7298: adc #EDITOR_COLS
7299: dex
7300: bne @Loop
7301: rts
7302:
7303: @DecrementAndExit:
7304: dec zTBLX
7305: rts
7306:
7307:
7308:
7309:
7310:
7311:
7312: AdjustCursorRowBeforeMovingRight:
7313: ldx #EDITOR_MAX_COMBINED_ROWS
7314: lda #EDITOR_COLS - 1
7315: @Loop:
7316: cmp zPNTR
7317: beq @IncrementAndExit
7318: clc
7319: adc #EDITOR_COLS
7320: dex
7321: bne @Loop
7322: rts
7323:
7324: @IncrementAndExit:
7325: ldx zTBLX
7326: cpx #EDITOR_ROWS
7327: beq @Rts
7328: inc zTBLX
7329: @Rts: rts
7330:
7331:
7332:
7333:
7334:
7335:
7336:
7337:
7338:
7339:
7340: EditorCheckColorCodeAndSetColor:
7341: ldx #END_ColorCodes - ColorCodes - 1
7342: @CheckColor:
7343: cmp ColorCodes,x
7344: beq @ColorFound
7345: dex
7346: bpl @CheckColor
7347: rts
7348: @ColorFound:
7349: stx lCOLOR
7350: rts
7351:
7352: ColorCodes:
7353:
7354:
7355:
7356: .byte $90,$05,$1C,$9F,$9C,$1E,$1F,$9E
7357:
7358: .if CompileComputer >= C64_GENERAL
7359: .byte $81,$95,$96,$97,$98,$99,$9A,$9B
7360:
7361: .endif
7362:
7363: END_ColorCodes:
7364:
7365: .if CompileComputer < C64_GENERAL
7366:
7367:
7368:
7369:
7370:
7371:
7372:
7373:
7374:
7375:
7376:
7377:
7378:
7379:
7380:
7381: CHROUT_REPLACEMENT_TABLE:
7382: .byte $EF,$A1
7383: .byte $DF,$A6
7384: .byte $E1,$B1
7385: .byte $E2,$B2
7386: .byte $E3,$B3
7387: .byte $E4,$B4
7388: .byte $E5,$B5
7389: .byte $E6,$B6
7390: .byte $E7,$B7
7391: .byte $E8,$B8
7392: .byte $E9,$B9
7393: .byte $FA,$BA
7394: .byte $FB,$BB
7395: .byte $FC,$BC
7396: .byte $EC,$BD
7397: .byte $FE,$BE
7398: .byte $84,$BF
7399: .byte $F7,$C0
7400: .byte $F8,$DB
7401: .byte $F9,$DD
7402: .byte $EA,$DE
7403:
7404: SpecialScreenCodeHandleTable:
7405:
7406:
7407:
7408:
7409:
7410:
7411:
7412: .byte $5E,$E0
7413: .byte $5B,$E1
7414: .byte $5D,$E2
7415: .byte $40,$B0
7416: .byte $61,$B1
7417: .byte $78,$DB
7418: .byte $79,$DD
7419: .byte $66,$B6
7420: .byte $77,$C0
7421: .byte $70,$F0
7422: .byte $71,$F1
7423: .byte $72,$F2
7424: .byte $73,$F3
7425: .byte $74,$F4
7426: .byte $75,$F5
7427: .byte $76,$F6
7428: .byte $7D,$FD
7429:
7430: SpecialScreenCodeHandleTable_END:
7431:
7432: .endif
7433:
7434: LE8EA: lda zSAL
7435: pha
7436: lda zSAL + 1
7437: pha
7438: lda zEAL
7439: pha
7440: lda zEAL + 1
7441: pha
7442: @LE8F6: ldx #$FF
7443: dec zTBLX
7444: dec zLXSP
7445: dec lTLNIDX
7446:
7447: @LE8FF: inx
7448: jsr CalculateScreenPointerFromRowNumber
7449: cpx #EDITOR_ROWS - 1
7450: bcs @LE913
7451: lda SCREEN_LOWBYTE + 1,x
7452: sta zSAL
7453: lda zLDTB1 + 1,x
7454: jsr CopyPhysicalScreenRow
7455: bmi @LE8FF
7456:
7457:
7458: @LE913:
7459: jsr EraseScreenRow
7460: ldx #0
7461: @LE918: lda zLDTB1,x
7462: and #$7F
7463: ldy zLDTB1 + 1,x
7464: bpl @LE922
7465: ora #$80
7466: @LE922: sta zLDTB1,x
7467: inx
7468: cpx #EDITOR_ROWS - 1
7469: bne @LE918
7470: lda zLDTB1 + EDITOR_ROWS - 1
7471: ora #$80
7472: sta zLDTB1 + EDITOR_ROWS - 1
7473: lda zLDTB1
7474: bpl @LE8F6
7475: inc zTBLX
7476: inc lTLNIDX
7477:
7478:
7479:
7480:
7481: .ifdef JIFFY
7482:
7483: JDLE938:
7484: jsr RestoreKeyboardRowAndRet
7485:
7486: .else
7487: lda #KEYB_ROW_CTRL
7488: sta KEYB_ROW
7489: .endif
7490: lda KEYB_COL
7491: cmp #KEYB_COL_CTRL
7492:
7493: .ifdef JIFFY
7494: bne @SkipDelay
7495: ldx zNDX
7496: beq JDLE938
7497: lda $0276,x
7498: sbc #$13
7499: bne @SkipDelay
7500: sta zNDX
7501: @JDLE94F: cli
7502: cmp zNDX
7503: beq @JDLE94F
7504: sta zNDX
7505:
7506: .else
7507: php
7508: lda #KEYB_ROW_STANDARD
7509: sta KEYB_ROW
7510: plp
7511: bne @SkipDelay
7512:
7513:
7514: ldy #0
7515: @Delay:
7516: nop
7517: dex
7518: bne @Delay
7519: dey
7520: bne @Delay
7521: sty zNDX
7522:
7523: .endif
7524:
7525: @SkipDelay:
7526: ldx zTBLX
7527:
7528: Restore_zEAL_and_zSAL:
7529: pla
7530: sta zEAL + 1
7531: pla
7532: sta zEAL
7533: pla
7534: sta zSAL + 1
7535: pla
7536: sta zSAL
7537: rts
7538:
7539: LE965:
7540: ldx zTBLX
7541: LE967:
7542:
7543: inx
7544: lda zLDTB1,x
7545: bpl LE967
7546:
7547: stx lTLNIDX
7548: cpx #EDITOR_ROWS - 1
7549: beq @LE981
7550: bcc @LE981
7551:
7552: jsr LE8EA
7553: ldx lTLNIDX
7554: dex
7555: dec zTBLX
7556: jmp LogicallyCombineTwoRows
7557:
7558:
7559:
7560:
7561:
7562:
7563: @LE981:
7564:
7565:
7566:
7567:
7568: lda zSAL
7569: pha
7570: lda zSAL + 1
7571: pha
7572: lda zEAL
7573: pha
7574: lda zEAL + 1
7575: pha
7576:
7577:
7578:
7579: ldx #EDITOR_ROWS
7580: @CopyRow:
7581: dex
7582: jsr CalculateScreenPointerFromRowNumber
7583: cpx lTLNIDX
7584: bcc @EndMove
7585: beq @EndMove
7586:
7587:
7588: lda SCREEN_LOWBYTE - 1,x
7589: sta zSAL
7590: lda zLDTB1 - 1,x
7591: jsr CopyPhysicalScreenRow
7592: bmi @CopyRow
7593:
7594:
7595: @EndMove:
7596: jsr EraseScreenRow
7597:
7598:
7599:
7600:
7601:
7602:
7603: ldx #EDITOR_ROWS - 2
7604:
7605: @MoveCombinationBits:
7606: cpx lTLNIDX
7607: bcc @EndMoveCombinationBits
7608:
7609: lda zLDTB1 + 1,x
7610: and #~$80
7611: ldy zLDTB1,x
7612: bpl @Positive
7613: ora #$80
7614: @Positive:
7615: sta zLDTB1 + 1,x
7616: dex
7617: bne @MoveCombinationBits
7618:
7619: @EndMoveCombinationBits:
7620: ldx lTLNIDX
7621: jsr LogicallyCombineTwoRows
7622:
7623:
7624:
7625: .if CompileComputer >= C64_GENERAL
7626: jmp Restore_zEAL_and_zSAL
7627: .else
7628: pla
7629: sta zEAL + 1
7630: pla
7631: sta zEAL
7632: pla
7633: sta zSAL + 1
7634: pla
7635: sta zSAL
7636: rts
7637: .endif
7638:
7639:
7640:
7641:
7642:
7643:
7644:
7645:
7646:
7647:
7648:
7649:
7650: CopyPhysicalScreenRow:
7651: and #>lVIDEORAM_SIZE
7652: ora lHIBASE
7653: sta zSAL + 1
7654: jsr @UpdateColorRamPointers
7655:
7656:
7657:
7658: ldy #EDITOR_COLS - 1
7659: @CopyPreviousChar:
7660: lda (zSAL),y
7661: sta (zPNT),y
7662: lda (zEAL),y
7663: sta (zUSER),y
7664: dey
7665: bpl @CopyPreviousChar
7666: rts
7667:
7668:
7669:
7670:
7671:
7672:
7673: @UpdateColorRamPointers:
7674: jsr UpdateColorRAMPointerToVideoramPointer
7675:
7676:
7677: lda zSAL
7678: sta zEAL
7679: lda zSAL + 1
7680: and #>lVIDEORAM_SIZE
7681: ora #>COLORRAM
7682: sta zEAL + 1
7683: rts
7684:
7685: CalculateScreenPointerFromRowNumber:
7686:
7687:
7688:
7689: lda SCREEN_LOWBYTE,x
7690: sta zPNT
7691: lda zLDTB1,x
7692: and #>lVIDEORAM_SIZE
7693: ora lHIBASE
7694: sta zPNT + 1
7695: rts
7696:
7697:
7698: EraseScreenRow:
7699:
7700:
7701:
7702: ldy #EDITOR_COLS - 1
7703: jsr CalculateScreenPointerFromRowNumber
7704: jsr UpdateColorRAMPointerToVideoramPointer
7705:
7706: @Loop:
7707: .if CompileComputer >= C64_03 .AND CompileComputer <> C64_4064
7708: jsr Patch_StoreColor
7709: .endif
7710: lda #' '
7711: sta (zPNT),y
7712: .if CompileComputer = C64_02 .OR CompileComputer = C64_4064
7713: jsr Patch_StoreColor
7714: nop
7715: .elseif CompileComputer <= C64_01
7716: lda #COL_WHITE
7717: sta (zUSER),y
7718: .endif
7719: dey
7720: bpl @Loop
7721: rts
7722:
7723:
7724: .if CompileComputer >= C64_03 .AND CompileComputer <> C64_4064
7725: nop
7726: .endif
7727:
7728:
7729: StoreCharacterOnScreenAndDisableBlinking:
7730: tay
7731:
7732: lda #$02
7733: sta zBLNCT
7734:
7735: jsr UpdateColorRAMPointerToVideoramPointer
7736:
7737: tya
7738:
7739:
7740:
7741:
7742:
7743:
7744:
7745: StoreCharacterOnScreen:
7746: ldy zPNTR
7747: sta (zPNT),y
7748: txa
7749: sta (zUSER),y
7750: rts
7751:
7752: UpdateColorRAMPointerToVideoramPointer:
7753: lda zPNT
7754: sta zUSER
7755: lda zPNT + 1
7756: and #>lVIDEORAM_SIZE
7757: ora #>COLORRAM
7758: sta zUSER + 1
7759: rts
7760:
7761: KIRQ:
7762: jsr kUDTIM
7763: lda zBLNSW
7764: bne @LEA61
7765: dec zBLNCT
7766: bne @LEA61
7767: lda #$14
7768: sta zBLNCT
7769: ldy zPNTR
7770: lsr zBLNON
7771: ldx lGDCOL
7772: lda (zPNT),y
7773: bcs @LEA5C
7774: inc zBLNON
7775: sta zGDBLN
7776: jsr UpdateColorRAMPointerToVideoramPointer
7777: lda (zUSER),y
7778: sta lGDCOL
7779: ldx lCOLOR
7780: lda zGDBLN
7781: @LEA5C: eor #$80
7782: jsr StoreCharacterOnScreen
7783:
7784: @LEA61:
7785:
7786: .ifdef JIFFY
7787:
7788: LEA61: jmp LEA7B
7789: LEA64: pla
7790: pha
7791: cmp #$98
7792: beq JDLEA6D
7793: JDLEA6A: jmp LA57C
7794: JDLEA6D: jsr JDLF72C
7795: bne JDLEA6A
7796: ldx zTXTPTR
7797: ldy #$04
7798: tya
7799: jmp JDLA5E3
7800: .byte $01
7801:
7802: .else
7803: lda TAPE_REG_SENSE
7804: and #TAPE_B_SENSE
7805: beq @LEA71
7806: ldy #$00
7807: sty zCAS1
7808: lda TAPE_REG_MOTOR
7809: ora #TAPE_B_MOTOR_ON
7810: bne @LEA79
7811:
7812:
7813: @LEA71: lda zCAS1
7814: bne LEA7B
7815: lda TAPE_REG_MOTOR
7816: and #TAPE_B_MOTOR_OFF_AND
7817: @LEA79:
7818: .if CompileComputer < C64_GENERAL
7819: bit VIA1_IEC
7820: bvs LEA7B
7821: .endif
7822: sta TAPE_REG_MOTOR
7823:
7824: .endif
7825:
7826: LEA7B:
7827: .if CompileComputer = C64_4064
7828: jsr LE4C8
7829: .else
7830: jsr iSCNKEY
7831: .endif
7832:
7833: .if CompileComputer >= C64_GENERAL
7834: lda CIA1 + CIA_O_ICR
7835: .else
7836: bit VIA2_T1CL
7837: .endif
7838: pla
7839: tay
7840: pla
7841: tax
7842: pla
7843: rti
7844:
7845:
7846:
7847:
7848:
7849:
7850:
7851:
7852:
7853:
7854:
7855:
7856:
7857:
7858:
7859:
7860:
7861:
7862:
7863:
7864:
7865:
7866:
7867:
7868:
7869:
7870:
7871:
7872:
7873: iSCNKEY:
7874: lda #0
7875: sta lSHFLAG
7876:
7877: ldy #KEY_NONE
7878: sty zSFDX
7879:
7880:
7881: sta KEYB_ROW
7882: ldx KEYB_COL
7883: cpx #$FF
7884: beq iSCNKEY_EndScan
7885:
7886:
7887: .if CompileComputer >= C64_GENERAL
7888: tay
7889: .else
7890: lda #~$01
7891: sta KEYB_ROW
7892: ldy #$00
7893: .endif
7894: lda #<KEYTAB_UNSHIFTED
7895: sta zKEYTAB
7896: lda #>KEYTAB_UNSHIFTED
7897: sta zKEYTAB + 1
7898:
7899: .if CompileComputer >= C64_GENERAL
7900: lda #~$01
7901: sta KEYB_ROW
7902: .endif
7903:
7904: @CheckAllRows:
7905: ldx #8
7906:
7907: .if CompileComputer >= C64_GENERAL
7908: pha
7909: .endif
7910:
7911: @UnbounceColumns:
7912: lda KEYB_COL
7913: cmp KEYB_COL
7914: .if CompileComputer >= C64_GENERAL
7915: bne @UnbounceColumns
7916: .else
7917: bne @CheckAllRows
7918:
7919: .endif
7920:
7921:
7922:
7923:
7924:
7925:
7926: @ProcessColumn:
7927: lsr a
7928: bcs @KeyNotPressed
7929:
7930: pha
7931:
7932: lda (zKEYTAB),y
7933: cmp #5
7934: bcs @StoreKey
7935: cmp #KEY_STOP
7936: beq @StoreKey
7937:
7938:
7939:
7940:
7941: ora lSHFLAG
7942: sta lSHFLAG
7943:
7944: bpl @DoNotStoreKey
7945:
7946:
7947: @StoreKey:
7948: sty zSFDX
7949:
7950: @DoNotStoreKey:
7951: pla
7952:
7953: @KeyNotPressed:
7954: iny
7955: cpy #$41
7956: bcs @EndScanning
7957:
7958: dex
7959: bne @ProcessColumn
7960:
7961:
7962:
7963:
7964:
7965:
7966:
7967:
7968:
7969:
7970:
7971:
7972:
7973:
7974: sec
7975:
7976: .if CompileComputer >= C64_GENERAL
7977: pla
7978: rol a
7979: sta KEYB_ROW
7980: .else
7981: rol KEYB_ROW
7982: .endif
7983: bne @CheckAllRows
7984:
7985: @EndScanning:
7986:
7987: .if CompileComputer >= C64_GENERAL
7988: pla
7989: .endif
7990:
7991:
7992:
7993:
7994: jmp (lKEYLOG)
7995:
7996: ConvertRawKeycodeToInterpretedKeycode:
7997: ldy zSFDX
7998: lda (zKEYTAB),y
7999: tax
8000:
8001: cpy zLSTX
8002: beq @CheckRepeat
8003: ldy #$10
8004: sty lDELAY
8005: bne StoreKeyCodeIntoKeyBuffer
8006:
8007: @CheckRepeat:
8008: and #$7F
8009:
8010:
8011:
8012: bit lRPTFLG
8013: bmi RepeatKey
8014: bvs RestoreKeyboardRowAndRet
8015:
8016: cmp #$7F
8017:
8018: iSCNKEY_EndScan:
8019: beq StoreKeyCodeIntoKeyBuffer
8020:
8021:
8022: cmp #ASC_INSDEL
8023: beq RepeatKey
8024:
8025: cmp #' '
8026: beq RepeatKey
8027:
8028: cmp #ASC_CURSORLEFTRIGHT
8029: beq RepeatKey
8030:
8031: cmp #ASC_CURSORUPDOWN
8032: bne RestoreKeyboardRowAndRet
8033:
8034: RepeatKey:
8035:
8036:
8037:
8038:
8039:
8040:
8041:
8042:
8043:
8044:
8045: ldy lDELAY
8046: beq @NoInitialDelay
8047:
8048: dec lDELAY
8049: bne RestoreKeyboardRowAndRet
8050:
8051: @NoInitialDelay:
8052: dec lKOUNT
8053: bne RestoreKeyboardRowAndRet
8054:
8055: ldy #$04
8056: sty lKOUNT
8057:
8058:
8059:
8060:
8061:
8062:
8063:
8064:
8065: ldy zNDX
8066: dey
8067: bpl RestoreKeyboardRowAndRet
8068:
8069: StoreKeyCodeIntoKeyBuffer:
8070:
8071:
8072:
8073:
8074:
8075:
8076: ldy zSFDX
8077: sty zLSTX
8078:
8079:
8080:
8081:
8082: ldy lSHFLAG
8083: sty lLSTSHF
8084:
8085: cpx #$FF
8086: beq RestoreKeyboardRowAndRet
8087: txa
8088:
8089:
8090:
8091:
8092:
8093: ldx zNDX
8094: cpx lXMAX
8095: bcs RestoreKeyboardRowAndRet
8096: sta lKEYD,x
8097: inx
8098: stx zNDX
8099:
8100: RestoreKeyboardRowAndRet:
8101: lda #KEYB_ROW_STANDARD
8102: sta KEYB_ROW
8103: rts
8104:
8105:
8106: CHECK_SHIFT_CTRL_CBM:
8107:
8108:
8109:
8110:
8111: lda lSHFLAG
8112: cmp #lSHFLAG_SHIFT | lSHFLAG_CBM
8113: bne @SwitchToShiftedKeyTable
8114:
8115: cmp lLSTSHF
8116: beq RestoreKeyboardRowAndRet
8117:
8118:
8119:
8120:
8121:
8122: lda lMODE
8123: bmi @ConvertRawKeycodeToInterpretedKeycode
8124:
8125: .if CompileComputer >= C64_GENERAL
8126:
8127:
8128:
8129: lda VIC + VICII_O_MemControl
8130: eor #$02
8131: sta VIC + VICII_O_MemControl
8132: .elseif CompileComputer >= VIC20_06
8133: .repeat 19
8134: nop
8135: .endrep
8136:
8137:
8138:
8139: lda VIC + VICI_O_MemoryLocations
8140: eor #$02
8141: sta VIC + VICI_O_MemoryLocations
8142:
8143: .repeat 4
8144: nop
8145: .endrep
8146: .else
8147:
8148:
8149:
8150: and #$18
8151: beq @SwitchToLowercase
8152:
8153:
8154:
8155:
8156: lda #$00
8157: sta lMODE
8158:
8159:
8160: lda VIC + VICI_O_MemoryLocations
8161: and #~$02
8162: sta VIC + VICI_O_MemoryLocations
8163:
8164: bne @ConvertRawKeycodeToInterpretedKeycode
8165:
8166:
8167: @SwitchToLowercase:
8168:
8169: lda VIC + VICI_O_MemoryLocations
8170: ora #$02
8171: sta VIC + VICI_O_MemoryLocations
8172:
8173:
8174: lda #$08
8175: sta lMODE
8176: .endif
8177:
8178: .if CompileComputer = VIC20_02
8179: bne @ConvertRawKeycodeToInterpretedKeycode
8180: .else
8181: jmp @ConvertRawKeycodeToInterpretedKeycode
8182: .endif
8183:
8184:
8185: @SwitchToShiftedKeyTable:
8186:
8187:
8188:
8189:
8190:
8191:
8192:
8193:
8194: asl a
8195: cmp #2 * lSHFLAG_CTRL
8196: bcc @UseOffset
8197: lda #$06
8198:
8199: .if CompileComputer >= C64_GENERAL
8200: .elseif CompileComputer >= VIC20_06
8201: nop
8202: nop
8203: .else
8204: bne @VIC20_02_HandleOffsetDirectly
8205:
8206: .endif
8207:
8208: @UseOffset:
8209:
8210: .if CompileComputer >= C64_GENERAL
8211:
8212: .elseif CompileComputer >= VIC20_06
8213: .repeat 32
8214: nop
8215: .endrep
8216: .else
8217:
8218: ldx lMODE
8219: beq @VIC20_02_HandleOffsetDirectly
8220:
8221: ldx lSHFLAG
8222: cpx #lSHFLAG_CBM
8223: bne @VIC20_02_HandleOffsetDirectly
8224:
8225:
8226:
8227: cpx lLSTSHF
8228: beq @ConvertRawKeycodeToInterpretedKeycode
8229:
8230:
8231:
8232:
8233:
8234:
8235: lda lMODE
8236: eor #$18
8237: sta lMODE
8238:
8239: bpl @ConvertRawKeycodeToInterpretedKeycode
8240:
8241: @VIC20_02_HandleOffsetDirectly:
8242: ora lMODE
8243: and #$7F
8244: .endif
8245:
8246: tax
8247:
8248:
8249:
8250: lda @KEYTABS_VEC,x
8251: sta zKEYTAB
8252: lda @KEYTABS_VEC + 1,x
8253: sta zKEYTAB + 1
8254:
8255: @ConvertRawKeycodeToInterpretedKeycode:
8256: jmp ConvertRawKeycodeToInterpretedKeycode
8257:
8258: @KEYTABS_VEC:
8259: .addr KEYTAB_UNSHIFTED
8260: .addr KEYTAB_SHIFT
8261: .addr KEYTAB_CBM
8262: .addr KEYTAB_CTRL
8263:
8264: .if CompileComputer < C64_GENERAL
8265:
8266:
8267:
8268:
8269:
8270: .addr KEYTAB_UNSHIFTED
8271: .addr KEYTAB_SHIFT
8272: .addr KEYTAB6
8273: .addr KEYTAB_CTRL
8274:
8275: .addr KEYTAB5
8276: .addr KEYTAB6
8277: .addr KEYTAB6
8278: .addr KEYTAB_CTRL
8279:
8280: .endif
8281:
8282: KEYTAB_UNSHIFTED:
8283:
8284: .if CompileComputer >= C64_GENERAL
8285:
8286: .byte $14,$0D,$1D,$88,$85,$86,$87,$11
8287: .byte $33,$57,$41,$34,$5A,$53,$45,$01
8288: .byte $35,$52,$44,$36,$43,$46,$54,$58
8289: .byte $37,$59,$47,$38,$42,$48,$55,$56
8290:
8291: .byte $39,$49,$4A,$30,$4D,$4B,$4F,$4E
8292: .byte $2B,$50,$4C,$2D,$2E,$3A,$40,$2C
8293: .byte $5C,$2A,$3B,$13,$01,$3D,$5E,$2F
8294: .byte $31,$5F,$04,$32,$20,$02,$51,$03
8295: .byte $FF
8296:
8297: .else
8298:
8299: .byte $31,$33,$35,$37,$39,$2B,$5C,$14
8300: .byte $5F,$57,$52,$59,$49,$50,$2A,$0D
8301: .byte $04,$41,$44,$47,$4A,$4C,$3B,$1D
8302: .byte $03,$01,$58,$56,$4E,$2C,$2F,$11
8303:
8304: .byte $20,$5A,$43,$42,$4D,$2E,$01,$85
8305: .byte $02,$53,$46,$48,$4B,$3A,$3D,$86
8306: .byte $51,$45,$54,$55,$4F,$40,$5E,$87
8307: .byte $32,$34,$36,$38,$30,$2D,$13,$88
8308:
8309: .byte $FF
8310:
8311: .endif
8312:
8313: KEYTAB_SHIFT:
8314:
8315: .if CompileComputer >= C64_GENERAL
8316:
8317: .if .defined(C64JAPAN)
8318: .byte $94,$8D,$9D,$8C,$89,$8A,$8B,$91
8319: .byte $23,$A8,$AA,$24,$AD,$AB,$A9,$01
8320: .byte $25,$A5,$AC,$26,$AF,$A4,$FF,$AE
8321: .byte $27,$FF,$FF,$28,$FF,$FF,$FF,$FF
8322:
8323: .byte $29,$FF,$FF,$30,$FF,$FF,$FF,$FF
8324: .byte $A1,$FF,$FF,$A2,$3E,$5B,$FF,$3C
8325: .byte $A3,$FF,$5D,$93,$01,$3D,$B0,$3F
8326: .byte $21,$5F,$04,$22,$A0,$02,$A7,$83
8327: .byte $FF
8328: .else
8329: .byte $94,$8D,$9D,$8C,$89,$8A,$8B,$91
8330: .byte $23,$D7,$C1,$24,$DA,$D3,$C5,$01
8331: .byte $25,$D2,$C4,$26,$C3,$C6,$D4,$D8
8332: .byte $27,$D9,$C7,$28,$C2,$C8,$D5,$D6
8333:
8334: .byte $29,$C9,$CA,$30,$CD,$CB,$CF,$CE
8335: .byte $DB,$D0,$CC,$DD,$3E,$5B,$BA,$3C
8336: .byte $A9,$C0,$5D,$93,$01,$3D,$DE,$3F
8337: .byte $21,$5F,$04,$22,$A0,$02,$D1,$83
8338: .byte $FF
8339: .endif
8340:
8341:
8342: .else
8343:
8344: .byte $21,$23,$25,$27,$29
8345: .if CompileComputer >= VIC20_06
8346: .byte $DB,$A9
8347: .else
8348: .byte $AB,$DC
8349: .endif
8350: .byte $94
8351:
8352: .if CompileComputer >= VIC20_06
8353: .byte $5F
8354: .else
8355: .byte $DF
8356: .endif
8357: .byte $D7,$D2,$D9,$C9,$D0
8358: .if CompileComputer >= VIC20_06
8359: .byte $C0
8360: .else
8361: .byte $AA
8362: .endif
8363: .byte $8D
8364:
8365: .byte $04,$C1,$C4,$C7,$CA,$CC,$5D,$9D
8366: .byte $83,$01,$D8,$D6,$CE,$3C,$3F,$91
8367:
8368: .byte $A0,$DA,$C3,$C2,$CD,$3E,$01,$89
8369: .byte $02,$D3,$C6,$C8,$CB,$5B
8370: .if CompileComputer >= VIC20_06
8371: .byte $3D
8372: .else
8373: .byte $BD
8374: .endif
8375: .byte $8A
8376:
8377: .byte $D1,$C5,$D4,$D5,$CF
8378: .if CompileComputer >= VIC20_06
8379: .byte $BA
8380: .else
8381: .byte $C0
8382: .endif
8383: .byte $DE,$8B
8384:
8385: .byte $22,$24,$26,$28
8386: .if CompileComputer >= VIC20_06
8387: .byte $30,$DD
8388: .else
8389: .byte $B0,$AD
8390: .endif
8391: .byte $93,$8C
8392:
8393: .byte $FF
8394:
8395: .endif
8396:
8397: KEYTAB_CBM:
8398:
8399: .if CompileComputer >= C64_GENERAL
8400:
8401: .if .defined(C64JAPAN)
8402: .byte $94,$8D,$9D,$8C,$89,$8A,$8B,$91
8403: .byte $B1,$C3,$C1,$B3,$C2,$C4,$B2,$01
8404: .byte $B4,$BD,$BC,$B5,$BF,$CA,$B6,$BB
8405: .byte $D4,$DD,$B7,$D5,$BA,$B8,$C5,$CB
8406:
8407: .byte $D6,$C6,$CF,$DC,$D3,$C9,$D7,$D0
8408: .byte $CE,$BE,$D8,$CD,$D9,$DA,$DB,$C8
8409: .byte $A6,$DE,$B9,$93,$01,$D1,$DF,$D2
8410: .byte $C7,$5F,$04,$CC,$A0,$02,$C0,$83
8411: .byte $FF
8412: .else
8413: .byte $94,$8D,$9D,$8C,$89,$8A,$8B,$91
8414: .byte $96,$B3,$B0,$97,$AD,$AE,$B1,$01
8415: .byte $98,$B2,$AC,$99,$BC,$BB,$A3,$BD
8416: .byte $9A,$B7,$A5,$9B,$BF,$B4,$B8,$BE
8417:
8418: .byte $29,$A2,$B5,$30,$A7,$A1,$B9,$AA
8419: .byte $A6,$AF,$B6,$DC,$3E,$5B,$A4,$3C
8420: .byte $A8,$DF,$5D,$93,$01,$3D,$DE,$3F
8421: .byte $81,$5F,$04,$95,$A0,$02,$AB,$83
8422: .byte $FF
8423: .endif
8424:
8425: .elseif CompileComputer = VIC20_02
8426: .byte $B1,$B3,$B5,$B7,$B9,$AB,$DC,$94
8427: .byte $DF,$D7,$D2,$D9,$C9,$D0,$AA,$8D
8428: .byte $04,$C1,$C4,$C7,$CA,$CC,$BB,$9D
8429: .byte $83,$01,$D8,$D6,$CE,$AC,$AF,$91
8430:
8431: .byte $0A,$DA,$C3,$C2,$CD,$AE,$01,$FF
8432: .byte $02,$D3,$C6,$C8,$CB,$BA,$BD,$FF
8433: .byte $D1,$C5,$D4,$D5,$CF,$C0,$DE,$FF
8434: .byte $B2,$B4,$B6,$B8,$B0,$AD,$93,$FF
8435: .byte $FF
8436: .else
8437: .byte $21,$23,$25,$27,$29,$A6,$A8,$94
8438: .byte $5F,$B3,$B2,$B7,$A2,$AF,$DF,$8D
8439: .byte $04,$B0,$AC,$A5,$B5,$B6,$5D,$9D
8440: .byte $83,$01,$BD,$BE,$AA,$3C,$3F,$91
8441:
8442: .byte $A0,$AD,$BC,$BF,$A7,$3E,$01,$89
8443: .byte $02,$AE,$BB,$B4,$A1,$5B,$3D,$8A
8444: .byte $AB,$B1,$A3,$B8,$B9,$A4,$DE,$8B
8445: .byte $22,$24,$26,$28,$30,$DC,$93,$8C
8446: .byte $FF
8447: .endif
8448:
8449: .if CompileComputer >= VIC20_06
8450:
8451: KEYTAB5:
8452:
8453: EditorCheckForAscLowercase:
8454: cmp #ASC_LOWERCASE
8455: bne EditorCheckForAscUppercase
8456:
8457:
8458:
8459: .if CompileComputer >= C64_GENERAL
8460: lda VIC + VICII_O_MemControl
8461: ora #2
8462: bne EditorSta_vMemControl
8463: .else
8464: lda #2
8465: ora VIC + VICI_O_MemoryLocations
8466: sta VIC + VICI_O_MemoryLocations
8467: jmp CHROUT_SCREEN_END
8468:
8469:
8470: .endif
8471:
8472: EditorCheckForAscUppercase:
8473: cmp #ASC_UPPERCASE
8474: bne EditorCheckForDisallowLowercase
8475:
8476:
8477:
8478: .if CompileComputer >= C64_GENERAL
8479: lda VIC + VICII_O_MemControl
8480: and #~2
8481: EditorSta_vMemControl:
8482: sta VIC + VICII_O_MemControl
8483: .else
8484: lda #~2
8485: and VIC + VICI_O_MemoryLocations
8486: sta VIC + VICI_O_MemoryLocations
8487: .endif
8488:
8489: EditorChroutScreenEnd:
8490: jmp CHROUT_SCREEN_END
8491:
8492:
8493: EditorCheckForDisallowLowercase:
8494: cmp #ASC_DISALLOW_LOWERCASE
8495: bne @CheckForAllowLowercase
8496:
8497:
8498:
8499: lda #$80
8500: ora lMODE
8501: .if CompileComputer >= C64_GENERAL
8502: bmi @Sta_lMODE
8503:
8504: .else
8505: sta lMODE
8506: bmi EditorChroutScreenEnd
8507: .endif
8508: @CheckForAllowLowercase:
8509: cmp #ASC_ALLOW_LOWERCASE
8510: bne EditorChroutScreenEnd
8511:
8512:
8513:
8514: lda #$7F
8515: and lMODE
8516: @Sta_lMODE:
8517: sta lMODE
8518:
8519:
8520:
8521:
8522: .if CompileComputer >= C64_GENERAL
8523: jmp CHROUT_SCREEN_END
8524: .else
8525: bpl EditorChroutScreenEnd
8526:
8527:
8528:
8529:
8530: EditorPatchLogicallyCombineTwoRows:
8531: EDITOR_PATCH_LogicallyCombineTwoRows_FIX
8532: EDITOR_PATCH_LogicallyCombineTwoRows_COMMON
8533: jmp EditorPatchLogicallyCombineTwoRows_Return
8534:
8535: .endif
8536: .endif
8537:
8538: .if CompileComputer = VIC20_02
8539:
8540: KEYTAB5:
8541:
8542: .byte $C7,$B1,$B4,$D4,$D6,$CE,$A6,$14
8543: .byte $FF,$C3,$EC,$DD,$C6,$BE,$EA,$0D
8544: .byte $04,$C1,$BC,$B7,$CF,$D8,$B9,$1D
8545: .byte $03,$01,$BB,$CB,$D0,$C8,$D2,$11
8546: .byte $20,$C2,$BF,$BA,$D3,$D9,$01,$85
8547: .byte $02,$C4,$CA,$B8,$C9,$DA,$D1,$86
8548: .byte $C0,$B2,$B6,$C5,$D7,$DB,$A1,$87
8549: .byte $CC,$B3,$B5,$D5,$DC,$CD,$13,$88
8550: .byte $FF
8551: .endif
8552:
8553: KEYTAB6:
8554:
8555: .if CompileComputer = VIC20_02
8556:
8557: .byte $F1,$F3,$F5,$FF,$FF,$EB,$FF,$94
8558: .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$8D
8559: .byte $04,$FF,$FF,$FF,$FF,$FF,$E2,$9D
8560: .byte $83,$01,$FF,$FF,$FF,$FF,$FF,$91
8561: .byte $A0,$FF,$FF,$FF,$FF,$EE,$01,$89
8562: .byte $02,$FF,$FF,$FF,$FF,$E1,$FD,$8A
8563: .byte $FF,$FF,$FF,$FF,$FF,$B0,$E0,$8B
8564: .byte $F2,$F4,$F6,$FF,$F0,$ED,$93,$8C
8565: .byte $FF
8566:
8567: .elseif CompileComputer < C64_GENERAL
8568:
8569:
8570:
8571: .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
8572: .byte $FF,$04,$FF,$FF,$FF,$FF,$FF,$E2
8573: .byte $9D,$83,$01,$FF,$FF,$FF,$FF,$FF
8574: .byte $91,$A0,$FF,$FF,$FF,$FF,$EE,$01
8575: .byte $89,$02,$FF,$FF,$FF,$FF,$E1,$FD
8576: .byte $8A,$FF,$FF,$FF,$FF,$FF,$B0,$E0
8577: .byte $8B,$F2,$F4,$F6,$FF,$F0,$ED,$93
8578: .byte $8C,$FF
8579:
8580: .endif
8581:
8582: KEYTAB_CTRL:
8583:
8584: .if CompileComputer >= C64_GENERAL
8585:
8586: .if .defined(C64JAPAN)
8587: .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
8588: .byte $1C,$95,$01,$9F,$1A,$13,$96,$FF
8589: .byte $9C,$97,$04,$1E,$03,$06,$98,$18
8590: .byte $1F,$99,$07,$9E,$02,$08,$9A,$16
8591:
8592: .byte $12,$9B,$0A,$92,$0D,$0B,$0F,$0E
8593: .byte $08,$10,$0C,$09,$11,$14,$00,$09
8594: .byte $FF,$05,$15,$FF,$FF,$17,$19,$12
8595: .byte $90,$06,$FF,$05,$FF,$FF,$81,$FF
8596: .byte $FF
8597: .else
8598: .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
8599: .byte $1C,$17,$01,$9F,$1A,$13,$05,$FF
8600: .byte $9C,$12,$04,$1E,$03,$06,$14,$18
8601: .byte $1F,$19,$07,$9E,$02,$08,$15,$16
8602:
8603: .byte $12,$09,$0A,$92,$0D,$0B,$0F,$0E
8604: .byte $FF,$10,$0C,$FF,$FF,$1B,$00,$FF
8605: .byte $1C,$FF,$1D,$FF,$FF,$1F,$1E,$FF
8606: .byte $90,$06,$FF,$05,$FF,$FF,$11,$FF
8607: .byte $FF
8608: .endif
8609:
8610: .else
8611:
8612: .byte $90,$1C,$9C,$1F
8613: .if CompileComputer = VIC20_02
8614: .byte $FF
8615: .else
8616: .byte $12
8617: .endif
8618: .byte $FF,$FF,$FF
8619: .if CompileComputer = VIC20_02
8620: .byte $FF
8621: .else
8622: .byte $06
8623: .endif
8624: .byte $FF,$12,$FF,$FF,$FF,$FF,$FF
8625: .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
8626: .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
8627: .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
8628: .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
8629: .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
8630: .byte $05,$9F,$1E,$9E,$92,$FF,$FF,$FF
8631: .byte $FF
8632:
8633: .endif
8634:
8635: VIC_DEFAULTS:
8636:
8637:
8638:
8639:
8640:
8641:
8642: .if CompileComputer >= C64_GENERAL
8643:
8644: .byte $00,$00,$00,$00,$00,$00,$00,$00
8645: .byte $00,$00,$00,$00,$00,$00,$00,$00
8646: .byte $00
8647: .if CompileComputer >= C64_02
8648: .byte $1B | (>311 .SHL 7) ,<311
8649: .else
8650: .byte $1B,$00
8651: .endif
8652: .byte $00,$00,$00,$08,$00
8653: .byte $14
8654: .if CompileComputer >= C64_02
8655: .byte $0F
8656: .else
8657: .byte $00
8658: .endif
8659: .byte $00,$00,$00,$00,$00,$00
8660:
8661: .byte SET_COLOR_FRAME,SET_COLOR_BACKGROUND
8662: .if CompileComputer = C64_4064
8663: .byte $00,$00,$00,$00,$00
8664: .byte $00,$00,$00,$00,$00,$00,$00
8665: .else
8666: .byte $01,$02,$03,$04,$00
8667: .byte $01,$02,$03,$04,$05,$06,$07
8668: .endif
8669:
8670: .else
8671:
8672: .if CompileComputer >= VIC20_07
8673: .byte $0C,$26
8674: .else
8675: .byte $05,$19
8676: .endif
8677: .byte $16,$2E,$00,$C0,$00,$00
8678: .byte $00,$00,$00,$00,$00,$00,$00
8679:
8680: .endif
8681:
8682: END_VIC_DEFAULTS:
8683:
8684: .if CompileComputer < C64_GENERAL
8685:
8686: .byte $1B
8687:
8688: .endif
8689:
8690: TEXT_LOADRUN:
8691: .byte "LOAD",ASC_CR
8692: .byte "RUN",ASC_CR
8693: END_TEXT_LOADRUN:
8694:
8695: SCREEN_LOWBYTE:
8696:
8697:
8698:
8699: .repeat EDITOR_ROWS,i
8700: .byte <(i*EDITOR_COLS)
8701: .endrep
8702:
8703:
8704:
8705:
8706:
8707:
8708:
8709:
8710:
8711:
8712:
8713:
8714:
8715:
8716:
8717:
8718:
8719:
8720:
8721:
8722:
8723:
8724:
8725:
8726:
8727:
8728:
8729:
8730: iTALK:
8731: ora #IEEE_TALK
8732:
8733: .byte ASM_BIT3
8734:
8735:
8736:
8737:
8738:
8739:
8740:
8741:
8742:
8743:
8744:
8745:
8746:
8747:
8748:
8749:
8750:
8751:
8752:
8753:
8754:
8755:
8756:
8757:
8758:
8759:
8760:
8761:
8762:
8763: iLISTEN:
8764: ora #IEEE_LISTEN
8765: jsr LF0A4
8766:
8767: IecOutputCommand:
8768: pha
8769:
8770: bit zC3PO
8771: bpl @BufferByte
8772:
8773:
8774:
8775:
8776: sec
8777: ror zTSFCNT
8778:
8779: .ifdef JIFFY
8780: jsr JDLFBFE
8781: .else
8782: jsr IecOutputByte
8783: .endif
8784:
8785:
8786: lsr zC3PO
8787:
8788: lsr zTSFCNT
8789:
8790: @BufferByte:
8791:
8792:
8793:
8794:
8795:
8796: pla
8797: sta zBSOUR
8798:
8799: .if CompileComputer >= C64_GENERAL
8800: sei
8801:
8802:
8803:
8804:
8805: .endif
8806:
8807:
8808: .ifdef JIFFY
8809: jsr JDLF0ED
8810: .else
8811: jsr IecDataClear
8812: .endif
8813:
8814: cmp #IEEE_UNLISTEN
8815: bne @NotUNLISTEN
8816:
8817: jsr IecClkClear
8818:
8819: @NotUNLISTEN:
8820:
8821:
8822:
8823: lda IEC_REG_ATN_OUT
8824: ora #IEC_B_ATN_OUT
8825: sta IEC_REG_ATN_OUT
8826:
8827: IecOutputByte2:
8828: .if CompileComputer >= C64_GENERAL
8829: sei
8830:
8831:
8832:
8833:
8834: .endif
8835: jsr IecClkSet
8836: jsr IecDataClear
8837: jsr IecDelay1ms
8838:
8839:
8840:
8841: IecOutputByte:
8842: sei
8843:
8844: .if CompileComputer >= VIC20_06
8845: jsr IecDataClear
8846: .endif
8847:
8848: jsr IecGetDataClockIn
8849: IEC_GET_DATA_INTO_CARRY
8850: bcs @DeviceNotPresent
8851: jsr IecClkClear
8852: bit zTSFCNT
8853: bpl @LED5A
8854:
8855: @WaitDataInactive:
8856: jsr IecGetDataClockIn
8857: IEC_GET_DATA_INTO_CARRY
8858: bcc @WaitDataInactive
8859:
8860: @WaitDataActive:
8861: jsr IecGetDataClockIn
8862: IEC_GET_DATA_INTO_CARRY
8863: bcs @WaitDataActive
8864:
8865: @LED5A:
8866: jsr IecGetDataClockIn
8867: IEC_GET_DATA_INTO_CARRY
8868: bcc @LED5A
8869:
8870: jsr IecClkSet
8871:
8872: .ifdef JIFFY
8873: txa
8874: pha
8875: ldx #8
8876: .else
8877: lda #8
8878: sta zCNTDN
8879: .endif
8880:
8881: @NextBit:
8882:
8883: .ifdef JIFFY
8884: pha
8885: pla
8886: bit IEC_REG
8887: bmi @JDLED72
8888: pla
8889: tax
8890: jmp SendTimeout
8891:
8892: @JDLED72:
8893: jsr IecDataClear
8894: ror zBSOUR
8895: bcs @JDLED7C
8896: jsr IecDataSet
8897:
8898: @JDLED7C:
8899: jsr IecClkClear
8900: lda IEC_REG
8901: and # ~ IEC_B_DATA_OUT
8902: ora #IEC_B_CLK_OUT
8903: php
8904: pha
8905: jsr JDLF8EA
8906: pla
8907: plp
8908: dex
8909: bne @NextBit
8910: pla
8911: tax
8912:
8913: .else
8914: lda IEC_REG_DATA_CLK_IN
8915: cmp IEC_REG_DATA_CLK_IN
8916: bne @NextBit
8917: IEC_REG__DATA_IN_INTO_CARRY
8918: bcc SendTimeout
8919:
8920: ror zBSOUR
8921: bcs @OutputData1
8922: jsr IecDataSet
8923: bne @ContinueAfterOutputData
8924:
8925: @OutputData1:
8926: jsr IecDataClear
8927:
8928: @ContinueAfterOutputData:
8929: jsr IecClkClear
8930:
8931:
8932: nop
8933: nop
8934: nop
8935: nop
8936:
8937:
8938: lda IEC_REG_DATA_CLK_OUT
8939: and #~IEC_B_DATA_OUT
8940: ora #IEC_B_CLK_OUT
8941: sta IEC_REG_DATA_CLK_OUT
8942:
8943: dec zCNTDN
8944: bne @NextBit
8945: .endif
8946:
8947:
8948:
8949:
8950:
8951: lda #>$0400
8952: sta IEC_TIMER_HI
8953:
8954: .if CompileComputer >= C64_GENERAL
8955:
8956:
8957: lda #CIA_CRB_B_START | CIA_CRB_B_ONESHOT | CIA_CRB_B_FORCE_LOAD
8958: sta CIA1 + CIA_O_CRB
8959:
8960: lda IEC_TIMER_FLAG_REG
8961:
8962:
8963: .endif
8964:
8965:
8966: @WaitForAck:
8967: lda IEC_TIMER_FLAG_REG
8968: and #IEC_TIMER_FLAG_B
8969: bne SendTimeout
8970: jsr IecGetDataClockIn
8971: IEC_GET_DATA_INTO_CARRY
8972: bcs @WaitForAck
8973: cli
8974: rts
8975:
8976:
8977: @DeviceNotPresent:
8978: lda #$80
8979:
8980: .byte ASM_BIT3
8981:
8982: SendTimeout:
8983: lda #$03
8984:
8985: IecSetStatusAndFreeBus:
8986: jsr SetStatus
8987:
8988: .if CompileComputer = VIC20_02
8989: jsr IEC_CLR_ATN
8990: jsr IecClkSet
8991: .endif
8992:
8993: cli
8994: .if CompileComputer >= VIC20_06
8995: clc
8996: bcc IecClearAtnAndClockAndDataAfterDelay
8997:
8998: .else
8999: jmp IecDataClear
9000:
9001: .endif
9002:
9003:
9004:
9005:
9006:
9007:
9008:
9009:
9010:
9011:
9012:
9013:
9014:
9015:
9016:
9017:
9018:
9019:
9020:
9021:
9022:
9023:
9024:
9025:
9026:
9027:
9028:
9029:
9030:
9031:
9032:
9033:
9034:
9035:
9036: iSECOND:
9037: sta zBSOUR
9038: jsr IecOutputByte2
9039:
9040: IEC_CLR_ATN:
9041:
9042:
9043: lda IEC_REG_ATN_OUT
9044: and #~IEC_B_ATN_OUT
9045: sta IEC_REG_ATN_OUT
9046:
9047: rts
9048:
9049:
9050:
9051:
9052:
9053:
9054:
9055:
9056:
9057:
9058:
9059:
9060:
9061:
9062:
9063:
9064:
9065:
9066:
9067:
9068:
9069:
9070:
9071:
9072:
9073:
9074:
9075:
9076:
9077:
9078:
9079:
9080:
9081: iTKSA:
9082: sta zBSOUR
9083: jsr IecOutputByte2
9084:
9085:
9086:
9087: iTKSA2:
9088: sei
9089: jsr IecDataSet
9090: jsr IEC_CLR_ATN
9091: jsr IecClkClear
9092:
9093: @LEDD6:
9094: .ifdef JIFFY
9095: bit IEC_REG
9096: .else
9097: jsr IecGetDataClockIn
9098: .endif
9099:
9100: .ifdef JIFFY
9101: bvs @LEDD6
9102: .elseif CompileComputer >= C64_GENERAL
9103: bmi @LEDD6
9104: .else
9105: bcs @LEDD6
9106: .endif
9107: cli
9108: rts
9109:
9110:
9111:
9112:
9113:
9114:
9115:
9116:
9117:
9118:
9119:
9120:
9121:
9122:
9123:
9124:
9125:
9126:
9127:
9128:
9129:
9130:
9131:
9132:
9133:
9134:
9135:
9136:
9137:
9138:
9139:
9140:
9141:
9142:
9143:
9144:
9145:
9146: iCIOUT:
9147: bit zC3PO
9148: bmi @SendBufferedChar
9149:
9150: sec
9151: ror zC3PO
9152:
9153: bne @NoCached
9154:
9155:
9156: @SendBufferedChar:
9157: pha
9158: .ifdef JIFFY
9159: jsr $FBFE
9160: .else
9161: jsr IecOutputByte
9162: .endif
9163: pla
9164:
9165: @NoCached:
9166: sta zBSOUR
9167:
9168: clc
9169: rts
9170:
9171:
9172:
9173:
9174:
9175:
9176:
9177:
9178:
9179:
9180:
9181:
9182:
9183:
9184:
9185:
9186:
9187:
9188:
9189:
9190:
9191:
9192:
9193:
9194: iUNTLK:
9195: .if CompileComputer >= C64_GENERAL
9196: sei
9197: .endif
9198:
9199:
9200:
9201: .ifdef JIFFY
9202: .else
9203: jsr IecClkSet
9204: .endif
9205:
9206:
9207:
9208: lda IEC_REG_ATN_OUT
9209: ora #IEC_B_ATN_OUT
9210: sta IEC_REG_ATN_OUT
9211:
9212: .ifdef JIFFY
9213: jsr IecClkSet
9214: .endif
9215:
9216: lda #IEEE_UNTALK
9217:
9218: .byte ASM_BIT3
9219:
9220:
9221:
9222:
9223:
9224:
9225:
9226:
9227:
9228:
9229:
9230:
9231:
9232:
9233:
9234:
9235:
9236:
9237:
9238:
9239:
9240:
9241:
9242:
9243:
9244: iUNLSN:
9245: lda #IEEE_UNLISTEN
9246:
9247: jsr IecOutputCommand
9248:
9249: .if CompileComputer = VIC20_02
9250: bne IEC_CLR_ATN
9251:
9252: .else
9253:
9254: IecClearAtnAndClockAndDataAfterDelay:
9255: jsr IEC_CLR_ATN
9256:
9257:
9258:
9259: IecClearClockAndDataAfterDelay:
9260: txa
9261: .if CompileComputer >= C64_GENERAL
9262:
9263: ldx #10
9264: .else
9265: ldx #11
9266: .endif
9267: @Delay: dex
9268: bne @Delay
9269: tax
9270: jsr IecClkClear
9271: jmp IecDataClear
9272: .endif
9273:
9274:
9275:
9276:
9277:
9278:
9279:
9280:
9281:
9282:
9283:
9284:
9285:
9286:
9287:
9288:
9289:
9290:
9291:
9292:
9293:
9294:
9295:
9296:
9297:
9298:
9299:
9300:
9301:
9302:
9303:
9304:
9305:
9306:
9307:
9308:
9309:
9310:
9311:
9312:
9313: iACPTR:
9314: .ifdef JIFFY
9315: jmp $FBAA
9316:
9317: .else
9318:
9319: sei
9320:
9321: .if CompileComputer < VIC20_06
9322: lda #8
9323: .else
9324: lda #0
9325: .endif
9326: .endif
9327:
9328: JDiACPTR:
9329: sta zCNTDN
9330:
9331:
9332:
9333: .if CompileComputer >= VIC20_06
9334: jsr IecClkClear
9335: .endif
9336:
9337:
9338: @WaitDataInactive:
9339:
9340:
9341:
9342:
9343: jsr IecGetDataClockIn
9344: .if CompileComputer >= C64_GENERAL
9345: bpl @WaitDataInactive
9346: .else
9347: bcc @WaitDataInactive
9348: jsr IecDataClear
9349: .endif
9350:
9351: @LEE20:
9352:
9353: lda #>$0100
9354: sta IEC_TIMER_HI
9355:
9356: .if CompileComputer >= C64_GENERAL
9357:
9358: lda #CIA_CRB_B_START | CIA_CRB_B_ONESHOT | CIA_CRB_B_FORCE_LOAD
9359: sta CIA1 + CIA_O_CRB
9360:
9361: jsr IecDataClear
9362:
9363: lda IEC_TIMER_FLAG_REG
9364:
9365:
9366:
9367: .endif
9368:
9369: @LEE30: lda IEC_TIMER_FLAG_REG
9370: and #IEC_TIMER_FLAG_B
9371: bne @LEE3E
9372:
9373: jsr IecGetDataClockIn
9374:
9375: .if CompileComputer >= C64_GENERAL
9376: bmi @LEE30
9377: bpl @LEE56
9378: .else
9379: bcs @LEE30
9380: bcc @LEE56
9381: .endif
9382:
9383:
9384: @LEE3E:
9385:
9386: .if CompileComputer = VIC20_02
9387:
9388: jsr IecDataSet
9389: txa
9390: ldx #$10
9391: @Delay: dex
9392: bne @Delay
9393: tax
9394: jsr IecDataClear
9395: jsr IecGetDataClockIn
9396:
9397: lda #$40
9398: jsr SetStatus
9399:
9400: @LEE56: lda IEC_REG_DATA_CLK_IN
9401: cmp IEC_REG_DATA_CLK_IN
9402: bne @LEE56
9403: IEC_REG__CLOCK_IN_INTO_CARRY
9404: bcc @LEE56
9405: lsr a
9406: ror zTBTCNT
9407:
9408: @WaitClkInactive:
9409: lda IEC_REG_DATA_CLK_IN
9410: cmp IEC_REG_DATA_CLK_IN
9411: bne @WaitClkInactive
9412:
9413: IEC_REG__CLOCK_IN_INTO_CARRY
9414: bcs @WaitClkInactive
9415: dec zCNTDN
9416: bne @LEE56
9417: jsr IecDataSet
9418: lda zTBTCNT
9419: cli
9420: clc
9421: rts
9422:
9423: .else
9424:
9425: lda zCNTDN
9426: beq @Proceed
9427:
9428: lda #$02
9429: jmp IecSetStatusAndFreeBus
9430:
9431:
9432: @Proceed:
9433: jsr IecDataSet
9434: .if CompileComputer >= C64_GENERAL
9435: jsr IecClkClear
9436: .else
9437: jsr IecClearClockAndDataAfterDelay
9438: .endif
9439: lda #$40
9440: jsr SetStatus
9441: inc zCNTDN
9442: bne @LEE20
9443:
9444: @LEE56: lda #8
9445: sta zCNTDN
9446: @LEE5A:
9447: lda IEC_REG_DATA_CLK_IN
9448: cmp IEC_REG_DATA_CLK_IN
9449: bne @LEE5A
9450:
9451: .if CompileComputer >= C64_GENERAL
9452: asl a
9453: bpl @LEE5A
9454: .else
9455: lsr a
9456: bcc @LEE5A
9457: lsr a
9458: .endif
9459: ror zTBTCNT
9460: @LEE67:
9461: lda IEC_REG_DATA_CLK_IN
9462: cmp IEC_REG_DATA_CLK_IN
9463: bne @LEE67
9464: .if CompileComputer >= C64_GENERAL
9465: asl a
9466: bmi @LEE67
9467: .else
9468: lsr a
9469: bcs @LEE67
9470: .endif
9471:
9472: dec zCNTDN
9473: bne @LEE5A
9474: jsr IecDataSet
9475: .if CompileComputer >= C64_GENERAL
9476: bit zSTATUS
9477: bvc @LEE80
9478: .else
9479: lda zSTATUS
9480: beq @LEE80
9481: .endif
9482: jsr IecClearClockAndDataAfterDelay
9483: @LEE80: lda zTBTCNT
9484: cli
9485: clc
9486: rts
9487: .endif
9488:
9489: IecClkClear:
9490:
9491: lda IEC_REG_DATA_CLK_OUT
9492: and #~IEC_B_CLK_OUT
9493: sta IEC_REG_DATA_CLK_OUT
9494: rts
9495:
9496: IecClkSet:
9497:
9498: lda IEC_REG_DATA_CLK_OUT
9499: ora #IEC_B_CLK_OUT
9500: sta IEC_REG_DATA_CLK_OUT
9501: rts
9502:
9503: .segment "KERNAL_IEC_DATA"
9504:
9505: IecDataClear:
9506: lda IEC_REG_DATA_CLK_OUT
9507: and #~IEC_B_DATA_OUT
9508: sta IEC_REG_DATA_CLK_OUT
9509: rts
9510: IecDataSet:
9511: lda IEC_REG_DATA_CLK_OUT
9512: ora #IEC_B_DATA_OUT
9513: sta IEC_REG_DATA_CLK_OUT
9514: rts
9515:
9516:
9517:
9518:
9519:
9520:
9521:
9522:
9523:
9524: IecGetDataClockIn:
9525: lda IEC_REG_DATA_CLK_IN
9526: cmp IEC_REG_DATA_CLK_IN
9527: bne IecGetDataClockIn
9528: .if CompileComputer >= C64_GENERAL
9529: asl a
9530: .else
9531: lsr a
9532: .endif
9533: rts
9534:
9535:
9536: .segment "KERNAL_IEC_DELAY"
9537:
9538: IecDelay1ms:
9539:
9540: .if CompileComputer >= C64_GENERAL
9541: txa
9542: ldx #184
9543: @Delay: dex
9544: bne @Delay
9545: tax
9546: .else
9547: lda #>$0400
9548: sta VIA2_T2CH
9549:
9550:
9551:
9552: @Wait:
9553: lda VIA2_IFR
9554: and #VIA_IFR_B_T2
9555: beq @Wait
9556: .endif
9557: rts
9558:
9559:
9560: LEEBB:
9561: lda zBITTS
9562: beq LEF06
9563: bmi @LEF00
9564: lsr zRODATA
9565: ldx #$00
9566: bcc @LEEC8
9567: dex
9568: @LEEC8:
9569: txa
9570: eor zROPRTY
9571: sta zROPRTY
9572: dec zBITTS
9573: beq @LEED7
9574: @LEED1:
9575: txa
9576: .if CompileComputer >= C64_GENERAL
9577: and #$04
9578: .else
9579: and #$20
9580: .endif
9581: sta zNXTBIT
9582: rts
9583:
9584: @LEED7:
9585: lda #$20
9586: bit lM51CDR
9587: beq @LEEF2
9588: bmi @LEEFC
9589: bvs @LEEF6
9590: lda zROPRTY
9591: bne @LEEE7
9592: @LEEE6:
9593: dex
9594: @LEEE7:
9595: dec zBITTS
9596: lda lM51CTR
9597: bpl @LEED1
9598: dec zBITTS
9599: bne @LEED1
9600: @LEEF2:
9601: inc zBITTS
9602: bne @LEEE6
9603: @LEEF6:
9604: lda zROPRTY
9605: beq @LEEE7
9606: bne @LEEE6
9607: @LEEFC:
9608: bvs @LEEE7
9609: bvc @LEEE6
9610:
9611:
9612: @LEF00:
9613: inc zBITTS
9614: ldx #$FF
9615: bne @LEED1
9616:
9617: LEF06:
9618: lda lM51CDR
9619: lsr a
9620: bcc @LEF13
9621: bit RS232_REG_2
9622: bpl LF016
9623: bvc LEF31
9624: @LEF13:
9625: lda #$00
9626: sta zROPRTY
9627: sta zNXTBIT
9628: ldx lBITNUM
9629: stx zBITTS
9630: ldy lRODBS
9631: cpy lRODBE
9632: beq LEF39
9633: lda (zROBUF),y
9634: sta zRODATA
9635: inc lRODBS
9636: rts
9637:
9638: LF016:
9639: lda #$40
9640: .byte ASM_BIT3
9641: LEF31:
9642: lda #$10
9643: ora lRSSTAT
9644: sta lRSSTAT
9645: LEF39:
9646: .if CompileComputer >= C64_GENERAL
9647: lda #CIA_ICR_B_TA
9648: LEF3B: sta CIA2 + CIA_O_ICR
9649: eor lENABL
9650: ora #CIA_ICR_BW_SET
9651: sta lENABL
9652: sta CIA2 + CIA_O_ICR
9653: .else
9654: lda #$40
9655: sta VIA1_IEC
9656: .endif
9657: rts
9658:
9659:
9660:
9661: LEF4A:
9662: ldx #$09
9663: lda #$20
9664: bit lM51CTR
9665: beq @LEF54
9666: dex
9667: @LEF54:
9668: bvc @LEF58
9669: dex
9670: dex
9671: @LEF58:
9672: rts
9673:
9674:
9675: LEF59: ldx zRINONE
9676: bne LEF90
9677: dec zBITC1
9678: beq LEF97
9679: bmi LEF70
9680: lda zINBIT
9681: eor zRIPRTY
9682: sta zRIPRTY
9683: lsr zINBIT
9684: ror zRIDATA
9685: LEF6D: rts
9686:
9687: LEF6E: dec zBITC1
9688: LEF70: lda zINBIT
9689: beq LEFDB
9690: lda lM51CTR
9691: asl a
9692: lda #$01
9693: adc zBITC1
9694: bne LEF6D
9695: LEF7E:
9696: .if CompileComputer >= C64_GENERAL
9697: lda #CIA_ICR_B_FLAG | CIA_ICR_BW_SET
9698: sta CIA2 + CIA_O_ICR
9699: ora lENABL
9700: sta lENABL
9701: .else
9702: lda #$90
9703: sta VIA1_IEC
9704: .endif
9705: sta zRINONE
9706: .if CompileComputer >= C64_GENERAL
9707: lda #$02
9708: jmp LEF3B
9709: .else
9710: lda #$20
9711: sta VIA1_IEC
9712: rts
9713: .endif
9714:
9715: LEF90: lda zINBIT
9716: bne LEF7E
9717: .if CompileComputer >= C64_03 .AND CompileComputer <> C64_4064
9718: jmp LE4D3
9719: .else
9720: sta zRINONE
9721: rts
9722: .endif
9723:
9724: LEF97: ldy lRIDBE
9725: iny
9726: cpy lRIDBS
9727: beq @LEFCA
9728: sty lRIDBE
9729: dey
9730: lda zRIDATA
9731: ldx lBITNUM
9732: @LEFA9: cpx #$09
9733: beq @LEFB1
9734: lsr a
9735: inx
9736: bne @LEFA9
9737: @LEFB1: sta (zRIBUF),y
9738: lda #$20
9739: bit lM51CDR
9740: beq LEF6E
9741: bmi LEF6D
9742: lda zINBIT
9743: eor zRIPRTY
9744: beq @LEFC5
9745: bvs LEF6D
9746: .byte ASM_BIT3
9747: @LEFC5: bvc LEF6D
9748: lda #$01
9749: .byte ASM_BIT3
9750: @LEFCA: lda #$04
9751: .byte ASM_BIT3
9752: LEFCD: lda #$80
9753: .byte ASM_BIT3
9754: LEFD0: lda #$02
9755: ora lRSSTAT
9756: sta lRSSTAT
9757: jmp LEF7E
9758:
9759: LEFDB: lda zRIDATA
9760: bne LEFD0
9761: beq LEFCD
9762: .if CompileComputer < C64_GENERAL
9763: Rs232ErrIllegalDeviceNumber:
9764: jmp KErrIllegalDeviceNumber
9765: .endif
9766:
9767: RS232_CHKOUT:
9768: sta zDFLTO
9769: lda lM51CDR
9770: lsr a
9771: bcc LF012
9772: lda #$02
9773: bit RS232_REG_1
9774: bpl LF00D
9775: bne LF012
9776:
9777: @LEFF2:
9778: .if CompileComputer >= C64_GENERAL
9779: lda lENABL
9780: and #CIA_ICR_B_TB
9781: .else
9782: lda VIA1_IEC
9783: and #$30
9784: .endif
9785: bne @LEFF2
9786: @LEFF9:
9787: bit RS232_REG_1
9788: bvs @LEFF9
9789: lda RS232_REG_1
9790: ora #$02
9791: sta RS232_REG_1
9792: @LF006:
9793: bit RS232_REG_1
9794: bvs LF012
9795: bmi @LF006
9796:
9797: LF00D:
9798: .if CompileComputer >= C64_GENERAL
9799: lda #$40
9800: sta lRSSTAT
9801: .else
9802: jsr LF016
9803: .endif
9804: LF012: clc
9805: rts
9806:
9807:
9808: LF014:
9809:
9810: .if CompileComputer >= C64_GENERAL
9811: jsr LF028
9812: .endif
9813:
9814:
9815:
9816:
9817:
9818:
9819:
9820:
9821:
9822: RS232_PUTCHAR:
9823: ldy lRODBE
9824: iny
9825: cpy lRODBS
9826: beq LF014
9827:
9828: sty lRODBE
9829:
9830: dey
9831:
9832: .if CompileComputer >= C64_GENERAL
9833: lda zPTR1
9834: .endif
9835: sta (zROBUF),y
9836:
9837: .if CompileComputer >= C64_GENERAL
9838: LF028: lda lENABL
9839: lsr a
9840: bcs @Rts
9841: lda #CIA_CRA_B_FORCE_LOAD
9842: sta CIA2 + CIA_O_CRA
9843: .else
9844: bit VIA1_IEC
9845: bvc @LF102
9846: rts
9847: @LF102:
9848:
9849: .endif
9850:
9851: lda lBAUDOF
9852: sta RS232_TIMER_LO
9853: lda lBAUDOF + 1
9854: sta RS232_TIMER_HI
9855:
9856: .if CompileComputer >= C64_GENERAL
9857: lda #$81
9858: jsr LEF3B
9859: jsr LEF06
9860: lda #$11
9861: sta CIA2 + CIA_O_CRA
9862: @Rts: rts
9863: .else
9864: lda #$C0
9865: sta VIA1_IEC
9866: jmp LEF06
9867: .endif
9868:
9869: RS232_CHKIN:
9870: sta zDFLTN
9871: lda lM51CDR
9872: lsr a
9873: bcc @LF07D
9874: and #$08
9875: beq @LF07D
9876: lda #$02
9877: bit RS232_REG_1
9878: bpl LF00D
9879: beq @ClcRts
9880:
9881: @LF062:
9882: .if CompileComputer >= C64_GENERAL
9883: lda lENABL
9884: lsr a
9885: bcs @LF062
9886: .else
9887: bit VIA1_IEC
9888: bvs @LF062
9889: .endif
9890:
9891: lda RS232_REG_1
9892: and #~$02
9893: sta RS232_REG_1
9894: @LF070:
9895: lda RS232_REG_1
9896: and #$04
9897: beq @LF070
9898: @LF077: lda #$90
9899: .if CompileComputer >= C64_GENERAL
9900: clc
9901: jmp LEF3B
9902: .else
9903: sta VIA1_IEC
9904: @ClcRts:
9905: clc
9906: rts
9907: .endif
9908:
9909: @LF07D:
9910:
9911: .if CompileComputer >= C64_GENERAL
9912: lda lENABL
9913: and #CIA_ICR_B_FLAG | CIA_ICR_B_TB
9914: .else
9915: lda VIA1_IEC
9916: and #$30
9917: .endif
9918: beq @LF077
9919:
9920: .if CompileComputer >= C64_GENERAL
9921: @ClcRts:
9922: .endif
9923: clc
9924: rts
9925:
9926:
9927:
9928:
9929:
9930:
9931:
9932:
9933:
9934: RS232_GETCHAR:
9935:
9936: .if CompileComputer >= C64_GENERAL
9937: lda lRSSTAT
9938: .endif
9939:
9940: ldy lRIDBS
9941: cpy lRIDBE
9942: beq @BufferEmpty
9943:
9944: .if CompileComputer >= C64_GENERAL
9945: and #~$08
9946: sta lRSSTAT
9947: .endif
9948: lda (zRIBUF),y
9949: inc lRIDBS
9950: rts
9951:
9952:
9953: @BufferEmpty:
9954:
9955: .if CompileComputer >= C64_GENERAL
9956: ora #$08
9957: sta lRSSTAT
9958: .endif
9959: lda #$00
9960: rts
9961:
9962:
9963:
9964: LF0A4:
9965:
9966: pha
9967: .if CompileComputer >= C64_GENERAL
9968: lda lENABL
9969: .else
9970: lda VIA1_IEC
9971: .endif
9972: beq @PlaRts
9973:
9974: @Wait:
9975:
9976: .if CompileComputer >= C64_GENERAL
9977: lda lENABL
9978: and #CIA_ICR_B_TA | CIA_ICR_B_TB
9979: .else
9980: lda VIA1_IEC
9981: and #VIA_IER_B_T1 | VIA_IER_B_T2
9982: .endif
9983: bne @Wait
9984:
9985: .if CompileComputer >= C64_GENERAL
9986: lda #CIA_ICR_B_FLAG
9987: sta CIA2 + CIA_O_ICR
9988: .else
9989: lda #VIA_IER_B_CB1
9990: sta VIA1_IEC
9991: .endif
9992:
9993: .if CompileComputer >= C64_GENERAL
9994: lda #$00
9995: sta lENABL
9996: .endif
9997:
9998: @PlaRts:
9999: pla
10000: rts
10001:
10002:
10003:
10004:
10005: LMESSAGES:
10006:
10007: StrIoError:
10008: .byte ASC_CR
10009: htasc "I/O ERROR #"
10010:
10011: StrSearching:
10012: .byte ASC_CR
10013: htasc "SEARCHING "
10014:
10015: StrFor:
10016: htasc "FOR "
10017:
10018: StrPlay:
10019:
10020: .ifdef JIFFY
10021:
10022: StrRecPlay = $F0EB
10023:
10024: JDLF0D8:
10025: lda #$00
10026: sta VIC + VICII_O_SprEnable
10027: @JDLF0DD:
10028: adc #$01
10029: bne @JDLF0DD
10030: rts
10031:
10032: JDLF0E2:
10033: lda zPTR2
10034: JDLF0E4:
10035: pha
10036: jsr kCLRCHN
10037: pla
10038: tax
10039: jmp kCHKIN
10040:
10041: JDLF0ED:
10042: lda #$00
10043: sta zTSFCNT
10044: jmp IecDataClear
10045:
10046: JDLF0F4:
10047: txa
10048: pha
10049: jsr JDLF7A2
10050: pla
10051: tax
10052: @JDLF0FB:
10053: lda JDLF398,x
10054: jsr kCHROUT
10055: inx
10056: dey
10057: bne @JDLF0FB
10058: rts
10059:
10060: .else
10061:
10062: .if CompileComputer = C64_SX64
10063:
10064:
10065:
10066:
10067:
10068: TEXT_LOAD_8_RUN:
10069: .byte "LOAD",'"',":*",'"',",8",ASC_CR
10070: .byte "RUN",ASC_CR
10071: END_TEXT_LOAD_8_RUN:
10072:
10073: .else
10074: .byte ASC_CR,"PRESS PLAY ON "
10075: .endif
10076: htasc "TAPE"
10077:
10078: StrRecPlay:
10079: htasc "PRESS RECORD & PLAY ON TAPE"
10080:
10081: .endif
10082:
10083: StrLoading:
10084: .byte ASC_CR
10085: htasc "LOADING"
10086:
10087: StrSaving:
10088: .byte ASC_CR
10089: htasc "SAVING "
10090:
10091: StrVerifying:
10092: .byte ASC_CR
10093: htasc "VERIFYING"
10094:
10095: StrFound:
10096: .byte ASC_CR
10097: htasc "FOUND "
10098: StrOk:
10099: .byte ASC_CR,"OK",ASC_CR + $80
10100:
10101:
10102: OutputMessageIfAllowed:
10103: bit zNSGFLG
10104: bpl OutputMessage_ClcRts
10105:
10106: OutputMessage:
10107: lda LMESSAGES,y
10108: php
10109:
10110: and #$7F
10111: jsr kCHROUT
10112: iny
10113:
10114: plp
10115: bpl OutputMessage
10116:
10117: OutputMessage_ClcRts:
10118: clc
10119: rts
10120:
10121:
10122:
10123:
10124:
10125:
10126:
10127:
10128:
10129:
10130:
10131:
10132:
10133:
10134:
10135:
10136:
10137:
10138:
10139:
10140:
10141:
10142:
10143:
10144:
10145:
10146:
10147:
10148:
10149:
10150:
10151:
10152:
10153:
10154:
10155:
10156:
10157:
10158:
10159:
10160:
10161: KGETIN:
10162: lda zDFLTN
10163: bne @NoKeyboard
10164: lda zNDX
10165: beq ClcRts1
10166: sei
10167: jmp GETIN_KEYB
10168:
10169: @NoKeyboard:
10170: cmp #FILE_RS232
10171: bne LF166
10172:
10173: KGETIN_RS232:
10174: sty zTEMPX
10175: jsr RS232_GETCHAR
10176: ldy zTEMPX
10177:
10178: .if CompileComputer >= C64_GENERAL
10179: ClcRts1:
10180: .endif
10181:
10182: clc
10183: rts
10184:
10185:
10186:
10187:
10188:
10189:
10190:
10191:
10192:
10193:
10194:
10195:
10196:
10197:
10198:
10199:
10200:
10201:
10202:
10203:
10204:
10205:
10206:
10207:
10208:
10209:
10210:
10211:
10212:
10213:
10214:
10215:
10216:
10217:
10218:
10219:
10220:
10221:
10222:
10223:
10224:
10225:
10226:
10227:
10228:
10229:
10230:
10231:
10232:
10233:
10234:
10235:
10236:
10237:
10238:
10239:
10240:
10241:
10242:
10243:
10244:
10245:
10246:
10247: KBASIN:
10248: lda zDFLTN
10249: .ifdef JIFFY
10250: bne JDLF1A9
10251: .else
10252: bne LF166
10253: .endif
10254:
10255:
10256: lda zPNTR
10257: sta zTEMP_zPNTR
10258:
10259: lda zTBLX
10260: sta zLXSP
10261:
10262: jmp BASIN_KEYB
10263:
10264:
10265: LF166: cmp #FILE_SCREEN
10266: bne KBASIN_NoScreen
10267:
10268:
10269: JDLF16A:
10270: sta zCRSW
10271:
10272: lda zLNMX
10273: sta zINDX
10274:
10275: jmp BASIN_KEYB
10276:
10277:
10278: KBASIN_NoScreen:
10279: bcs KBASIN_TestIec
10280: cmp #FILE_RS232
10281: beq BASIN_RS232
10282:
10283: .ifdef JIFFY
10284: JDLF179:
10285: jsr JDLFBAA
10286: pha
10287: bit zTSFCNT
10288: bvc LF19C
10289: cpx #$00
10290: bne LF187
10291: lda $C4
10292: LF187: cmp #$04
10293: bcc LF19C
10294: ldy #$00
10295: lda (zFNADR),y
10296: cmp #$24
10297: beq LF19C
10298: inc zSA
10299: jsr JDLF38B
10300: dec zSA
10301: asl zTSFCNT
10302: LF19C: pla
10303: rts
10304: LF19E: lda #$10
10305: jmp SetStatus
10306:
10307: LF1A3: .addr PatchErrorOut
10308: .addr IMAIN
10309: .addr LA57C
10310:
10311: JDLF1A9:
10312: cmp #$04
10313: bcc LF166
10314:
10315: .else
10316:
10317:
10318: stx zTEMPX
10319: jsr @GetNextTapeCharacterFromBuffer
10320: bcs @Ret_No_PLA
10321:
10322:
10323:
10324:
10325:
10326: pha
10327: jsr @GetNextTapeCharacterFromBuffer
10328: bcs @Ret_With_PLA
10329:
10330: bne @NoNulCharacter
10331:
10332:
10333: lda #STATUS_TAPE_EOF
10334: jsr SetStatus
10335:
10336: @NoNulCharacter:
10337: dec zBUFPNT
10338:
10339: ldx zTEMPX
10340: pla
10341: rts
10342:
10343:
10344: @Ret_With_PLA:
10345: tax
10346: pla
10347: txa
10348:
10349: @Ret_No_PLA:
10350: ldx zTEMPX
10351: rts
10352:
10353:
10354: @GetNextTapeCharacterFromBuffer:
10355: jsr TAPE_INCREMENT_WRITE_POINTER
10356: bne @ReadTapeBuffer
10357:
10358:
10359:
10360: jsr TapeReadNextBuffer
10361: bcs BASIN_RTS1
10362:
10363: lda #0
10364: sta zBUFPNT
10365:
10366: beq @GetNextTapeCharacterFromBuffer
10367:
10368:
10369: @ReadTapeBuffer:
10370: lda (zTAPE1),y
10371: clc
10372: rts
10373: .endif
10374:
10375: KBASIN_TestIec:
10376:
10377: lda zSTATUS
10378: beq BASIN_IEC
10379:
10380: ReturnCR:
10381: lda #ASC_CR
10382:
10383: .if CompileComputer < C64_GENERAL
10384: ClcRts1:
10385: .endif
10386: ClcRts2:
10387: clc
10388: .if CompileComputer >= C64_GENERAL
10389: BASIN_RTS2:
10390: .endif
10391: BASIN_RTS1:
10392: rts
10393:
10394: BASIN_IEC:
10395: .ifdef JIFFY
10396: jmp JDLFBAA
10397: .else
10398: jmp iACPTR
10399: .endif
10400:
10401: BASIN_RS232:
10402:
10403: jsr KGETIN_RS232
10404: bcs BASIN_RTS2
10405:
10406: cmp #0
10407:
10408: .if CompileComputer >= C64_GENERAL
10409: bne ClcRts2
10410:
10411: lda lRSSTAT
10412: and #$60
10413: bne ReturnCR
10414: beq BASIN_RS232
10415:
10416: .else
10417: beq BASIN_RS232
10418: clc
10419:
10420: BASIN_RTS2:
10421: rts
10422:
10423: .endif
10424:
10425:
10426:
10427:
10428:
10429:
10430:
10431:
10432:
10433:
10434:
10435:
10436:
10437:
10438:
10439:
10440:
10441:
10442:
10443:
10444:
10445:
10446:
10447:
10448:
10449:
10450:
10451:
10452:
10453:
10454:
10455:
10456:
10457:
10458:
10459:
10460:
10461:
10462:
10463:
10464:
10465:
10466:
10467:
10468:
10469: KBSOUT:
10470: pha
10471: lda zDFLTO
10472: cmp #FILE_SCREEN
10473: bne @NoScreen
10474: pla
10475: jmp CHROUT_SCREEN
10476:
10477:
10478: @NoScreen:
10479: bcc @NoIec
10480: pla
10481: jmp iCIOUT
10482:
10483: @NoIec:
10484: .if CompileComputer >= C64_GENERAL
10485:
10486:
10487:
10488: lsr a
10489:
10490:
10491: .else
10492: cmp #FILE_RS232
10493: beq KBSOUT_RS232
10494: .endif
10495:
10496: pla
10497:
10498: KBSOUT_TAPE:
10499:
10500: sta zPTR1
10501:
10502: .if CompileComputer < C64_GENERAL
10503: pha
10504: .endif
10505: txa
10506: pha
10507: tya
10508: pha
10509:
10510: .if CompileComputer >= C64_GENERAL
10511: bcc KBSOUT_RS232
10512: .endif
10513:
10514:
10515:
10516: .ifdef JIFFY
10517: jmp JDLF3F1
10518:
10519: JDLF1E8:
10520: jsr JDLF8BF
10521: jsr JDLE4C6
10522: cmp #$30
10523: rts
10524: jsr bGTBYTC
10525: stx zFA
10526: jsr JDLF75C
10527: stx zFSBLK
10528: rts
10529:
10530: .else
10531: jsr TAPE_INCREMENT_WRITE_POINTER
10532: bne @BufferNotYetFull
10533:
10534:
10535:
10536: jsr TapeWriteCompleteBuffer
10537: bcs BSOUT_Quit
10538:
10539: lda #TAPE_BUFFER_TYPE_CONTINUATION
10540: ldy #TAPE_BUFFER_OFFSET_TYPE
10541: sta (zTAPE1),y
10542: iny
10543: sty zBUFPNT
10544:
10545: @BufferNotYetFull:
10546: lda zPTR1
10547: sta (zTAPE1),y
10548:
10549: .endif
10550:
10551: BSOUT_QuitSuccess:
10552: clc
10553:
10554: BSOUT_Quit:
10555: pla
10556: tay
10557: pla
10558: tax
10559: .if CompileComputer >= C64_GENERAL
10560: lda zPTR1
10561: .else
10562: pla
10563: .endif
10564:
10565: bcc @Rts
10566: lda #0
10567: @Rts: rts
10568:
10569: KBSOUT_RS232:
10570:
10571: .if CompileComputer < C64_GENERAL
10572: pla
10573: stx zTEMPX
10574: sty zPTR1
10575: .endif
10576:
10577: jsr RS232_PUTCHAR
10578:
10579: .if CompileComputer >= C64_GENERAL
10580: jmp BSOUT_QuitSuccess
10581:
10582: .else
10583: ldx zTEMPX
10584: ldy zPTR1
10585: clc
10586: rts
10587:
10588: .endif
10589:
10590:
10591:
10592:
10593:
10594:
10595:
10596:
10597:
10598:
10599:
10600:
10601:
10602:
10603:
10604:
10605:
10606:
10607:
10608:
10609:
10610:
10611:
10612:
10613:
10614:
10615:
10616:
10617:
10618:
10619:
10620:
10621:
10622:
10623:
10624:
10625:
10626:
10627:
10628:
10629:
10630:
10631:
10632:
10633:
10634: KCHKIN:
10635: jsr FindFileAndClearStatus
10636: beq @Found
10637: jmp KErrFileNotOpen
10638:
10639: @Found:
10640: jsr SetActiveFile
10641: lda zFA
10642: beq @SetDefault
10643:
10644: cmp #FILE_SCREEN
10645: beq @SetDefault
10646:
10647: bcs @Iec
10648:
10649: cmp #FILE_RS232
10650: bne @Tape
10651:
10652: jmp RS232_CHKIN
10653:
10654:
10655:
10656:
10657: @Tape:
10658: ldx zSA
10659: cpx #$60
10660: beq @SetDefault
10661: jmp KErrNotInputFile
10662:
10663: @SetDefault:
10664: sta zDFLTN
10665: clc
10666: rts
10667:
10668:
10669:
10670:
10671:
10672: @Iec:
10673: tax
10674: jsr iTALK
10675:
10676: lda zSA
10677: bpl @SecondaryAddress
10678:
10679: jsr iTKSA2
10680: jmp @CheckStatus
10681:
10682: @SecondaryAddress:
10683: jsr iTKSA
10684:
10685: @CheckStatus:
10686: txa
10687:
10688: bit zSTATUS
10689: bpl @SetDefault
10690:
10691: jmp KErrDeviceNotPresent
10692:
10693:
10694:
10695:
10696:
10697:
10698:
10699:
10700:
10701:
10702:
10703:
10704:
10705:
10706:
10707:
10708:
10709:
10710:
10711:
10712:
10713:
10714:
10715:
10716:
10717:
10718:
10719:
10720:
10721:
10722:
10723:
10724:
10725:
10726:
10727:
10728:
10729:
10730:
10731:
10732:
10733:
10734:
10735:
10736:
10737:
10738:
10739: KCHKOUT:
10740: jsr FindFileAndClearStatus
10741: beq @Found
10742: jmp KErrFileNotOpen
10743:
10744: @Found:
10745: jsr SetActiveFile
10746: lda zFA
10747: bne @NoScreen
10748:
10749:
10750: @NotInputFile:
10751: jmp KErrNotOutputFile
10752:
10753: @NoScreen:
10754: cmp #FILE_SCREEN
10755: beq @SetDefault
10756:
10757: bcs @Iec
10758:
10759: cmp #FILE_RS232
10760: bne @Tape
10761:
10762: jmp RS232_CHKOUT
10763:
10764: @Tape:
10765: ldx zSA
10766: cpx #$60
10767: beq @NotInputFile
10768:
10769: @SetDefault:
10770: sta zDFLTO
10771: clc
10772: rts
10773:
10774:
10775: @Iec:
10776: tax
10777: jsr iLISTEN
10778:
10779: lda zSA
10780: bpl @SecondaryAddress
10781:
10782: jsr IEC_CLR_ATN
10783: bne @CheckStatus
10784:
10785:
10786: @SecondaryAddress:
10787: jsr iSECOND
10788:
10789: @CheckStatus:
10790: txa
10791:
10792: bit zSTATUS
10793: bpl @SetDefault
10794:
10795: jmp KErrDeviceNotPresent
10796:
10797:
10798:
10799:
10800:
10801:
10802:
10803:
10804:
10805:
10806:
10807:
10808:
10809:
10810:
10811:
10812:
10813:
10814:
10815:
10816:
10817:
10818:
10819:
10820:
10821:
10822:
10823:
10824:
10825:
10826:
10827:
10828:
10829:
10830:
10831: KCLOSE:
10832: jsr FindFile
10833: beq @DoClose
10834:
10835:
10836: clc
10837: rts
10838:
10839:
10840: @DoClose:
10841: jsr SetActiveFile
10842:
10843: txa
10844: pha
10845:
10846: lda zFA
10847: beq CLOSE_GET_BACK_INDEX_AND_DELETE_FROM_TABLE
10848: cmp #FILE_SCREEN
10849: beq CLOSE_GET_BACK_INDEX_AND_DELETE_FROM_TABLE
10850:
10851: bcs CLOSE_FILE_ON_IEC
10852:
10853: cmp #FILE_RS232
10854: bne @Tape
10855:
10856:
10857:
10858:
10859:
10860: pla
10861: jsr CLOSE_DELETE_FROM_TABLE
10862:
10863: .if CompileComputer >= C64_GENERAL
10864: jsr LF483
10865: .else
10866: lda #$7D
10867: sta VIA1_IEC
10868: lda #$06
10869: sta VIA1_PB
10870: lda #$EE
10871: sta VIA1_PCR
10872: .endif
10873:
10874:
10875:
10876:
10877: jsr iMEMTOP_Get
10878: lda zRIBUF + 1
10879: beq :+
10880:
10881: iny
10882:
10883: :
10884: lda zROBUF + 1
10885: beq :+
10886:
10887: iny
10888:
10889: :
10890: lda #0
10891: sta zRIBUF + 1
10892: sta zROBUF + 1
10893:
10894: jmp SetMemtop_And_Return_With_F0
10895:
10896:
10897:
10898:
10899:
10900: @Tape:
10901: .ifdef JIFFY
10902: pla
10903: jmp KErrIllegalDeviceNumber
10904:
10905: LF2CC: jsr kCLRCHN
10906: LF2CF: lda #$6F
10907: jsr FindFile
10908: bne CLOSE_Rts
10909: jmp JDLF2F3
10910:
10911: LF2D9: stx zFA
10912: LF2DB: tya
10913: pha
10914: jsr JDLF8B2
10915: jsr JDLF7A2
10916: php
10917: jsr LF2CC
10918: plp
10919: pla
10920: tay
10921: ldx zFA
10922: rts
10923: .byte $F2
10924:
10925: .else
10926:
10927: lda zSA
10928: and #$0F
10929: beq CLOSE_GET_BACK_INDEX_AND_DELETE_FROM_TABLE
10930:
10931: jsr TapeGetPointer
10932: lda #0
10933:
10934: .if CompileComputer >= C64_GENERAL
10935: sec
10936:
10937:
10938: .endif
10939:
10940: jsr KBSOUT_TAPE
10941:
10942: .if 0
10943:
10944:
10945: .macro FILEIO_PATCH_CLOSE_TAPE
10946:
10947: jsr TapeWriteCompleteBuffer
10948: bcc FileIoPatch_NoError
10949:
10950: pla
10951: lda #$00
10952:
10953: .endmacro
10954: .endif
10955:
10956: .if CompileComputer >= C64_GENERAL
10957:
10958: FILEIO_PATCH_CLOSE_TAPE
10959:
10960: rts
10961:
10962: FileIoPatch_NoError:
10963:
10964: .elseif CompileComputer = VIC20_02
10965:
10966: jsr TapeWriteCompleteBuffer
10967: bcs CLOSE_ClcRts
10968:
10969: .else
10970: jmp FileIoPatchCloseTape
10971:
10972: FileIoPatchCloseTape_Return:
10973:
10974: bcs CLOSE_Rts
10975:
10976:
10977: .endif
10978:
10979: lda zSA
10980: cmp #$62
10981: bne CLOSE_GET_BACK_INDEX_AND_DELETE_FROM_TABLE
10982:
10983:
10984:
10985: lda #TAPE_BUFFER_TYPE_EOT
10986: jsr TapeCreateFileBuffer
10987:
10988: jmp CLOSE_GET_BACK_INDEX_AND_DELETE_FROM_TABLE
10989:
10990: .endif
10991:
10992: CLOSE_FILE_ON_IEC:
10993: jsr IecClose
10994:
10995: CLOSE_GET_BACK_INDEX_AND_DELETE_FROM_TABLE:
10996: pla
10997:
10998: CLOSE_DELETE_FROM_TABLE:
10999: tax
11000:
11001: JDLF2F3:
11002: dec zLDTND
11003:
11004: cpx zLDTND
11005: beq CLOSE_ClcRts
11006:
11007:
11008: ldy zLDTND
11009:
11010: lda lLAT,y
11011: sta lLAT,x
11012: lda lFAT,y
11013: sta lFAT,x
11014: lda lSAT,y
11015: sta lSAT,x
11016:
11017: CLOSE_ClcRts:
11018: clc
11019: CLOSE_Rts:
11020: rts
11021:
11022:
11023:
11024:
11025:
11026:
11027:
11028:
11029:
11030:
11031:
11032:
11033:
11034:
11035:
11036:
11037: FindFileAndClearStatus:
11038: lda #0
11039: sta zSTATUS
11040: txa
11041:
11042:
11043:
11044:
11045:
11046:
11047:
11048:
11049:
11050:
11051:
11052:
11053:
11054:
11055:
11056:
11057:
11058: FindFile:
11059: ldx zLDTND
11060: @Next: dex
11061: bmi FindFileRts
11062: cmp lLAT,x
11063: bne @Next
11064: rts
11065:
11066:
11067:
11068:
11069:
11070:
11071:
11072:
11073:
11074:
11075:
11076:
11077: SetActiveFile:
11078: lda lLAT,x
11079: sta zLA
11080:
11081: lda lFAT,x
11082: sta zFA
11083:
11084: lda lSAT,x
11085: sta zSA
11086:
11087: FindFileRts:
11088: rts
11089:
11090:
11091:
11092:
11093:
11094:
11095:
11096:
11097:
11098:
11099:
11100:
11101:
11102:
11103:
11104:
11105:
11106:
11107:
11108:
11109:
11110:
11111:
11112:
11113:
11114:
11115:
11116: KCLALL:
11117: lda #$00
11118: sta zLDTND
11119:
11120:
11121:
11122:
11123:
11124:
11125:
11126:
11127:
11128:
11129:
11130:
11131:
11132:
11133:
11134:
11135:
11136:
11137:
11138:
11139:
11140:
11141:
11142:
11143:
11144:
11145:
11146:
11147:
11148:
11149:
11150:
11151:
11152:
11153: KCLRCH:
11154: ldx #FILE_SCREEN
11155:
11156: cpx zDFLTO
11157: bcs :+
11158:
11159: jsr iUNLSN
11160:
11161: : cpx zDFLTN
11162: bcs :+
11163:
11164: jsr iUNTLK
11165:
11166: : stx zDFLTO
11167:
11168: lda #FILE_KEYBOARD
11169: sta zDFLTN
11170: rts
11171:
11172:
11173:
11174:
11175:
11176:
11177:
11178:
11179:
11180:
11181:
11182:
11183:
11184:
11185:
11186:
11187:
11188:
11189:
11190:
11191:
11192:
11193:
11194:
11195:
11196:
11197:
11198:
11199:
11200:
11201:
11202:
11203:
11204:
11205:
11206:
11207:
11208:
11209:
11210:
11211:
11212:
11213:
11214:
11215:
11216: KOPEN:
11217: ldx zLA
11218: bne :+
11219: jmp KErrNotInputFile
11220:
11221:
11222: : jsr FindFileAndClearStatus
11223: bne :+
11224: jmp KErrFileOpen
11225:
11226: : ldx zLDTND
11227: cpx #lLAT_Size
11228: bcc :+
11229: jmp KErrTooManyOpenFiles
11230:
11231: : inc zLDTND
11232:
11233: lda zLA
11234: sta lLAT,x
11235:
11236: lda zSA
11237: ora #IEEE_OPEN
11238: sta zSA
11239: sta lSAT,x
11240:
11241: lda zFA
11242: sta lFAT,x
11243:
11244: beq KOPEN_ClcRts
11245:
11246: cmp #FILE_SCREEN
11247: beq KOPEN_ClcRts
11248:
11249: bcc @NoIec
11250:
11251: jsr KOPEN_IEC
11252: bcc KOPEN_ClcRts
11253:
11254:
11255:
11256: @NoIec:
11257:
11258: .ifdef JIFFY
11259: cmp #$01
11260: beq JDLF3F3
11261: jmp OPEN_RS232
11262:
11263: JDLF38B:
11264: jsr kUNTLK
11265: lda zFA
11266: jsr kTALK
11267: lda zSA
11268: jmp kTKSA
11269:
11270: JDLF398:
11271:
11272:
11273: eor $572D
11274: brk
11275: asl $1C
11276: lda $0261
11277: sta zCHARAC
11278: lda #$12
11279: sta $06
11280: ldx #$00
11281: stx zROBUF
11282: jsr $D586
11283: ldy $0267
11284: lda ($30),y
11285: eor #$40
11286: sta ($30),y
11287: jmp $D58A
11288: eor $452D
11289: brk
11290: asl zOPMASK
11291: and $6A57
11292: brk
11293: ora (zOPMASK,x)
11294: and $6957
11295: brk
11296: ora ($50,x)
11297: ror a:zR6510
11298: .byte $53
11299: .byte $3A
11300:
11301: .else
11302: cmp #FILE_RS232
11303:
11304: .if CompileComputer = C64_SX64
11305: bne @ErrIllegalDeviceNumber
11306: .else
11307: bne @Tape
11308: .endif
11309: jmp OPEN_RS232
11310:
11311:
11312:
11313:
11314: @Tape:
11315: jsr TapeGetPointer
11316: bcs @TapeAllowed
11317:
11318: @ErrIllegalDeviceNumber:
11319: jmp KErrIllegalDeviceNumber
11320:
11321: @TapeAllowed:
11322: lda zSA
11323: and #$0F
11324: bne KLOAD_OpenTapeForWrite
11325:
11326:
11327:
11328: jsr TapePressPlayOnTape
11329: bcs KOPEN_Rts
11330:
11331: jsr OutputSearchingFor
11332:
11333: lda zFNLEN
11334: beq KLOAD_NoFilenameGiven
11335:
11336:
11337:
11338: jsr TapeFindSpecificFile
11339: bcc KLOAD_PrepareTapeBuffer
11340:
11341: beq KOPEN_Rts
11342:
11343: KLOAD_ErrFileNotFound:
11344: jmp KErrFileNotFound
11345:
11346:
11347:
11348: KLOAD_NoFilenameGiven:
11349:
11350:
11351: jsr TapeReadTapeHeaderOfNextFile
11352: beq KOPEN_Rts
11353: bcc KLOAD_PrepareTapeBuffer
11354:
11355: bcs KLOAD_ErrFileNotFound
11356:
11357:
11358: KLOAD_OpenTapeForWrite:
11359: jsr TapePressRecordAndPlayOnTape
11360: bcs KOPEN_Rts
11361:
11362: lda #TAPE_BUFFER_TYPE_DATA
11363: jsr TapeCreateFileBuffer
11364:
11365: KLOAD_PrepareTapeBuffer:
11366:
11367:
11368:
11369:
11370:
11371:
11372:
11373:
11374:
11375:
11376: lda #lTBUFFR_SIZE - 1
11377:
11378: ldy zSA
11379: cpy #$60
11380: beq @NoWrite
11381:
11382:
11383:
11384: ldy #0
11385: lda #TAPE_BUFFER_TYPE_CONTINUATION
11386: sta (zTAPE1),y
11387:
11388: tya
11389:
11390: .endif
11391:
11392: @NoWrite:
11393: sta zBUFPNT
11394:
11395: .if CompileComputer >= C64_GENERAL
11396: KOPEN_ClcRts2:
11397: .endif
11398:
11399: KOPEN_ClcRts:
11400: clc
11401:
11402: KOPEN_Rts:
11403: rts
11404:
11405:
11406:
11407:
11408:
11409:
11410:
11411:
11412: KOPEN_IEC:
11413: lda zSA
11414: bmi KOPEN_ClcRts2
11415:
11416: ldy zFNLEN
11417: beq KOPEN_ClcRts2
11418:
11419: .if CompileComputer >= C64_GENERAL
11420: lda #0
11421: sta zSTATUS
11422: .endif
11423:
11424: lda zFA
11425: jsr iLISTEN
11426:
11427: lda zSA
11428: ora #IEEE_SECONDARY
11429: jsr iSECOND
11430:
11431: lda zSTATUS
11432: bpl KOPEN_Iec_DeviceExists
11433:
11434: JDLF3F1:
11435:
11436:
11437: pla
11438: pla
11439:
11440: JDLF3F3:
11441: jmp KErrDeviceNotPresent
11442:
11443:
11444: KOPEN_Iec_DeviceExists:
11445: lda zFNLEN
11446: beq @NoName
11447:
11448:
11449:
11450: ldy #0
11451: : lda (zFNADR),y
11452: jsr iCIOUT
11453: iny
11454: cpy zFNLEN
11455: bne :-
11456:
11457: @NoName:
11458: .if CompileComputer >= C64_GENERAL
11459:
11460:
11461: jmp DoUnlistenClcRts
11462: .else
11463:
11464:
11465: jsr iUNLSN
11466:
11467: .if CompileComputer < C64_GENERAL
11468: KOPEN_ClcRts2:
11469: .endif
11470: clc
11471: rts
11472: .endif
11473:
11474: OPEN_RS232:
11475:
11476:
11477:
11478: .if CompileComputer >= C64_GENERAL
11479: jsr LF483
11480: .else
11481: lda #$06
11482: sta VIA1_DDRB
11483: sta VIA1_PB
11484: lda #$EE
11485: sta VIA1_PCR
11486: ldy #0
11487: .endif
11488: sty lRSSTAT
11489: @LF40F: cpy zFNLEN
11490: beq @LF41D
11491: lda (zFNADR),y
11492: sta lM51CTR,y
11493: iny
11494: cpy #$04
11495: bne @LF40F
11496: @LF41D:
11497: jsr LEF4A
11498: stx lBITNUM
11499: lda lM51CTR
11500: and #$0F
11501:
11502: .if CompileComputer >= C64_02
11503: beq @LF446
11504: asl a
11505: tax
11506: lda lTVSFLG
11507: bne @LF43A
11508: ldy LFEC2 - 1,x
11509: lda LFEC2 - 2,x
11510: jmp @LF440
11511: @LF43A:
11512: ldy LE4EC-1,x
11513: lda LE4EC-2,x
11514: @LF440:
11515: sty lM51AJB + 1
11516: sta lM51AJB
11517: @LF446:
11518: lda lM51AJB
11519: asl a
11520: jsr LFF2E
11521: lda lM51CDR
11522: lsr a
11523: bcc @LF45C
11524: lda CIA2 + CIA_O_PB
11525: asl a
11526: bcs @LF45C
11527: jsr LF00D
11528: .else
11529: bne @LF435
11530: .if CompileComputer >= C64_GENERAL
11531: lda lM51AJB
11532: asl a
11533: tay
11534: lda lM51AJB + 1
11535: jmp @LF43F
11536: .endif
11537: @LF435: asl a
11538: tax
11539: lda LFEC2 - 2,x
11540: asl a
11541: tay
11542: lda LFEC2 - 1,x
11543: @LF43F: rol a
11544: pha
11545: tya
11546: adc #<200
11547: sta lBAUDOF
11548: pla
11549: adc #>200
11550: sta lBAUDOF + 1
11551: lda lM51CDR
11552: lsr a
11553: bcc @LF45C
11554: .if CompileComputer >= C64_GENERAL
11555: lda CIA2 + CIA_O_PB
11556: .else
11557: lda VIA2_PB
11558: .endif
11559: asl a
11560: bcs @LF45C
11561: .if CompileComputer >= C64_GENERAL
11562: jmp LF00D
11563: .else
11564: jmp LF016
11565: .endif
11566: .endif
11567:
11568: @LF45C: lda lRIDBE
11569: sta lRIDBS
11570: lda lRODBE
11571: sta lRODBS
11572: jsr iMEMTOP_Get
11573: lda zRIBUF + 1
11574: bne @LF474
11575: dey
11576: sty zRIBUF + 1
11577: stx zRIBUF
11578: @LF474:
11579: lda zROBUF + 1
11580: bne SetMemtop_And_Return_With_F0
11581: dey
11582: sty zROBUF + 1
11583: stx zROBUF
11584:
11585: SetMemtop_And_Return_With_F0:
11586: sec
11587: lda #$F0
11588: jmp iMEMTOP_Set
11589:
11590: .if CompileComputer >= C64_GENERAL
11591: LF483: lda #$7F
11592: sta CIA2 + CIA_O_ICR
11593: lda #$06
11594: sta CIA2 + CIA_O_DDRB
11595: sta CIA2 + CIA_O_PB
11596: lda #$04
11597: ora IEC_REG
11598: sta IEC_REG
11599: ldy #$00
11600: sty lENABL
11601: rts
11602: .endif
11603:
11604:
11605:
11606:
11607:
11608:
11609:
11610:
11611:
11612:
11613:
11614:
11615:
11616:
11617:
11618:
11619:
11620:
11621:
11622:
11623:
11624:
11625:
11626:
11627:
11628:
11629:
11630:
11631:
11632:
11633:
11634:
11635:
11636:
11637:
11638:
11639:
11640:
11641:
11642:
11643:
11644:
11645:
11646:
11647:
11648:
11649:
11650:
11651:
11652:
11653:
11654:
11655:
11656:
11657:
11658:
11659:
11660:
11661:
11662:
11663:
11664:
11665:
11666:
11667:
11668:
11669:
11670:
11671:
11672:
11673: iLOAD: stx zMEMUSS_2
11674: sty zMEMUSS_2 + 1
11675: jmp (lILOAD)
11676:
11677: KLOAD:
11678: sta zVERCKK
11679:
11680: lda #0
11681: sta zSTATUS
11682:
11683: lda zFA
11684: bne @NotKeyboard
11685:
11686: @ErrIllegalDeviceNumber:
11687: jmp KErrIllegalDeviceNumber
11688:
11689:
11690: @NotKeyboard:
11691: cmp #FILE_SCREEN
11692: beq @ErrIllegalDeviceNumber
11693:
11694:
11695:
11696: .ifdef JIFFY
11697:
11698:
11699:
11700: bcc @ErrIllegalDeviceNumber
11701: .elseif CompileComputer = C64_SX64
11702:
11703:
11704:
11705: bcc @ErrIllegalDeviceNumber
11706: .else
11707: bcc KLOAD_TapeOrRS232
11708: .endif
11709:
11710:
11711:
11712:
11713: .if CompileComputer = VIC20_02
11714: lda #IEEE_OPEN
11715: sta zSA
11716: .endif
11717:
11718: ldy zFNLEN
11719: bne KLOAD_FileNameGiven
11720: .ifdef JIFFY
11721: jmp $F659
11722: .else
11723: jmp KErrFileNameMissing
11724: .endif
11725:
11726:
11727: KLOAD_FileNameGiven:
11728:
11729: .if CompileComputer = VIC20_02
11730:
11731:
11732:
11733:
11734: jsr OutputSearchingFor
11735:
11736: .elseif CompileComputer >= C64_GENERAL
11737:
11738:
11739:
11740: ldx zSA
11741: jsr OutputSearchingFor
11742: .else
11743:
11744:
11745: jsr LE4BC
11746: .endif
11747:
11748: .if CompileComputer <> VIC20_02
11749: lda #IEEE_LOAD
11750: sta zSA
11751: .endif
11752:
11753: jsr KOPEN_IEC
11754:
11755:
11756: lda zFA
11757: jsr iTALK
11758: lda zSA
11759: jsr iTKSA
11760:
11761: jsr iACPTR
11762: sta zEAL
11763:
11764: lda zSTATUS
11765: lsr a
11766: lsr a
11767: bcs KLOAD_ErrFileNotFound2
11768:
11769: .ifdef JIFFY
11770: jsr JDLF179
11771: .else
11772: jsr iACPTR
11773: .endif
11774: sta zEAL + 1
11775:
11776: .if 0
11777:
11778:
11779: .macro LOAD_OVERWRITE_START_ADDRESS
11780: txa
11781: bne :+
11782: lda zMEMUSS
11783: sta zEAL
11784: lda zMEMUSS + 1
11785: sta zEAL + 1
11786: :
11787:
11788: .endmacro
11789: .endif
11790:
11791: .if CompileComputer >= C64_GENERAL
11792: LOAD_OVERWRITE_START_ADDRESS
11793: .endif
11794:
11795:
11796: .ifdef JIFFY
11797: @LF4F0:
11798: jmp JDLFAC4
11799:
11800: LF4F3:
11801: jsr kSTOP
11802: bne @LF4FB
11803: jmp IecCloseBecauseStopKey
11804: @LF4FB:
11805: jsr JDLFBAA
11806: lda zSTATUS
11807: and #$FD
11808: cmp zSTATUS
11809: sta zSTATUS
11810: bne LF4F3
11811: ldy #$00
11812: ldx zTSFCNT
11813: lda zTBTCNT
11814: cpy zVERCKK
11815: beq @LF51A
11816: cmp (zEAL),y
11817: beq @LF51C
11818: jsr LF19E
11819: .byte $2C
11820: @LF51A:
11821: sta (zEAL),y
11822: @LF51C:
11823: stx zTSFCNT
11824:
11825: .else
11826:
11827: .if CompileComputer >= C64_GENERAL .or CompileComputer = VIC20_02
11828: jsr OutputLoadingOrVerify
11829: .else
11830:
11831:
11832:
11833:
11834:
11835:
11836: jsr LE4C1
11837: .endif
11838:
11839: LF4F3:
11840: lda #~STATUS_IEC_TIMEOUT_READ
11841: and zSTATUS
11842: sta zSTATUS
11843:
11844: jsr kSTOP
11845: bne @ReadByte
11846:
11847: jmp IecCloseBecauseStopKey
11848:
11849: @ReadByte:
11850: jsr iACPTR
11851: tax
11852:
11853: lda zSTATUS
11854: lsr a
11855: lsr a
11856: bcs LF4F3
11857:
11858: txa
11859:
11860: ldy zVERCKK
11861: beq @Load
11862:
11863: ldy #0
11864: cmp (zEAL),y
11865: beq @IncrementAddress
11866:
11867: lda #STATUS_VERIFY
11868: jsr SetStatus
11869:
11870: .byte ASM_BIT3
11871:
11872: @Load:
11873:
11874: sta (zEAL),y
11875:
11876: .endif
11877:
11878: @IncrementAddress:
11879: inc zEAL
11880: bne :+
11881: inc zEAL + 1
11882:
11883: : bit zSTATUS
11884: bvc LF4F3
11885:
11886: KLOAD_UntalkClose:
11887: jsr iUNTLK
11888: jsr IecClose
11889: bcc LoadEndSuccess
11890:
11891: KLOAD_ErrFileNotFound2:
11892: jmp KErrFileNotFound
11893:
11894:
11895: KLOAD_TapeOrRS232:
11896:
11897:
11898:
11899: .ifdef JIFFY
11900:
11901: lda zFNLEN
11902: beq LF546
11903: lda (zFNADR),y
11904: cmp #$24
11905: beq LF56C
11906: jmp JDLFC9A
11907: tya
11908: LF541: pha
11909: jsr JDLF8BF
11910: pla
11911: LF546: sta zBUFPNT
11912: LF548: jsr JDLF911
11913: bne LF568
11914: lda zBUFPNT
11915: php
11916: beq LF557
11917: jsr JDLE4C6
11918: beq LF567
11919: LF557: jsr JDLF79A
11920: jsr OutputFilename
11921: bit zSTKEY
11922: bpl LF567
11923: plp
11924: bne LF548
11925: bvc LF548
11926: .byte $24
11927: LF567: plp
11928: LF568: rts
11929: ldx #$6C
11930: .byte $2C
11931: LF56C: ldx #$60
11932: jsr JDLF8C1
11933: lda #$39
11934: sta lIERROR
11935: ldy #$FC
11936: jsr JDLFCA6
11937: LF57B: ldy #$00
11938: LF57D: jsr JDLFCA6
11939: bvs LF5A3
11940: cpy #$02
11941: beq LF5A3
11942: cpy #$06
11943: bcc LF57D
11944: ldx zFNADR
11945: stx $5F
11946: ldx $BC
11947: stx $60
11948: ldy #$01
11949: sta ($5F),y
11950: jsr JDLA6C3
11951: jsr JDLF79A
11952: jsr JDLA6D4
11953: bit zSTKEY
11954: bmi LF57B
11955: LF5A3: lda #$63
11956: sta lIERROR
11957: rts
11958:
11959: .else
11960:
11961: .if CompileComputer >= C64_GENERAL
11962: lsr a
11963: bcs @Tape
11964: jmp KErrIllegalDeviceNumber
11965: .else
11966: cmp #FILE_RS232
11967: bne @Tape
11968: jmp Rs232ErrIllegalDeviceNumber
11969: .endif
11970:
11971:
11972: @Tape:
11973: jsr TapeGetPointer
11974: bcs :+
11975: jmp KErrIllegalDeviceNumber
11976:
11977: :
11978: jsr TapePressPlayOnTape
11979: bcs LoadRts
11980:
11981: jsr OutputSearchingFor
11982:
11983: @LF549: lda zFNLEN
11984: beq :+
11985: jsr TapeFindSpecificFile
11986: bcc @FoundFile
11987: beq LoadRts
11988: bcs KLOAD_ErrFileNotFound2
11989:
11990:
11991: :
11992: jsr TapeReadTapeHeaderOfNextFile
11993: beq LoadRts
11994: bcs KLOAD_ErrFileNotFound2
11995:
11996: @FoundFile:
11997: lda zSTATUS
11998: and #STATUS_VERIFY
11999: sec
12000: bne LoadRts
12001:
12002: cpx #TAPE_BUFFER_TYPE_BASIC
12003: beq @BASIC_Program
12004:
12005: cpx #TAPE_BUFFER_TYPE_ABSOLUTE
12006: bne @LF549
12007:
12008: @Absolute_Program:
12009: ldy #TAPE_BUFFER_OFFSET_SAL_LOW
12010: lda (zTAPE1),y
12011: sta zMEMUSS_2
12012: iny
12013: lda (zTAPE1),y
12014: sta zMEMUSS_2 + 1
12015: bcs @LoadFile
12016:
12017:
12018: @BASIC_Program:
12019: lda zSA
12020: bne @Absolute_Program
12021:
12022:
12023:
12024:
12025: @LoadFile:
12026:
12027:
12028:
12029:
12030: ldy #TAPE_BUFFER_OFFSET_EAL_LOW
12031: lda (zTAPE1),y
12032: ldy #TAPE_BUFFER_OFFSET_SAL_LOW
12033: sbc (zTAPE1),y
12034: tax
12035:
12036: ldy #TAPE_BUFFER_OFFSET_EAL_HIGH
12037: lda (zTAPE1),y
12038: ldy #TAPE_BUFFER_OFFSET_SAL_HIGH
12039: sbc (zTAPE1),y
12040: tay
12041:
12042:
12043: clc
12044: txa
12045: adc zMEMUSS_2
12046: sta zEAL
12047:
12048: tya
12049: adc zMEMUSS_2 + 1
12050: sta zEAL + 1
12051:
12052:
12053:
12054: lda zMEMUSS_2
12055: sta zSTAL
12056: lda zMEMUSS_2 + 1
12057: sta zSTAL + 1
12058:
12059: jsr OutputLoadingOrVerify
12060:
12061: jsr TapeReadFileContents
12062: .byte ASM_BIT2
12063:
12064: .endif
12065:
12066: LoadEndSuccess:
12067: clc
12068: ldx zEAL
12069: ldy zEAL + 1
12070: LoadRts:
12071: rts
12072:
12073:
12074: OutputSearchingFor:
12075: lda zNSGFLG
12076: bpl OutputSearchingFor_Rts
12077:
12078: ldy #StrSearching - LMESSAGES
12079: jsr OutputMessage
12080:
12081: lda zFNLEN
12082: beq OutputSearchingFor_Rts
12083:
12084: ldy #StrFor - LMESSAGES
12085: jsr OutputMessage
12086:
12087: OutputFilename:
12088: ldy zFNLEN
12089: beq OutputSearchingFor_Rts
12090:
12091: ldy #0
12092: : lda (zFNADR),y
12093: jsr kCHROUT
12094: iny
12095: cpy zFNLEN
12096: bne :-
12097:
12098: OutputSearchingFor_Rts:
12099: rts
12100:
12101:
12102: OutputLoadingOrVerify:
12103: ldy #StrLoading - LMESSAGES
12104: lda zVERCKK
12105: beq @Output
12106: ldy #StrVerifying - LMESSAGES
12107: @Output:
12108: jmp OutputMessageIfAllowed
12109:
12110:
12111:
12112:
12113:
12114:
12115:
12116:
12117:
12118:
12119:
12120:
12121:
12122:
12123:
12124:
12125:
12126:
12127:
12128:
12129:
12130:
12131:
12132:
12133:
12134:
12135:
12136:
12137:
12138:
12139:
12140:
12141:
12142:
12143:
12144:
12145:
12146:
12147:
12148:
12149:
12150:
12151:
12152:
12153:
12154:
12155:
12156:
12157:
12158:
12159:
12160:
12161:
12162:
12163:
12164:
12165:
12166:
12167: iSAVE:
12168: stx zEAL
12169: sty zEAL + 1
12170:
12171:
12172:
12173: tax
12174: lda 0,x
12175: sta zSTAL
12176: lda 0 + 1,x
12177: sta zSTAL + 1
12178: jmp (lISAVE)
12179:
12180: KSAVE:
12181: lda zFA
12182: bne SaveNotKeyboard
12183:
12184: SaveErrIllegalDeviceNumber:
12185: jmp KErrIllegalDeviceNumber
12186:
12187: SaveNotKeyboard:
12188: cmp #FILE_SCREEN
12189: beq SaveErrIllegalDeviceNumber
12190:
12191:
12192:
12193: .ifdef JIFFY
12194: bcc SaveErrIllegalDeviceNumber
12195: .elseif CompileComputer = C64_SX64
12196: bcc SaveErrIllegalDeviceNumber
12197: .else
12198: bcc SaveTapeOrRs232
12199: .endif
12200:
12201:
12202:
12203: lda #IEEE_SAVE
12204: sta zSA
12205:
12206: ldy zFNLEN
12207: bne LF605
12208:
12209: SAVE_KErrFileNameMissing:
12210: jmp KErrFileNameMissing
12211:
12212: LF605:
12213: jsr KOPEN_IEC
12214: jsr OutputSaving
12215:
12216: lda zFA
12217: jsr iLISTEN
12218: lda zSA
12219: jsr iSECOND
12220:
12221: ldy #0
12222:
12223: jsr Copy_zSTAL_to_zSAL
12224:
12225:
12226: lda zSAL
12227: jsr iCIOUT
12228: lda zSAL + 1
12229: jsr iCIOUT
12230:
12231: SAVE_Loop:
12232: jsr HasEndAddressBeenReached
12233: bcs SAVE_End
12234:
12235: lda (zSAL),y
12236: jsr iCIOUT
12237:
12238: jsr kSTOP
12239: bne SAVE_NoStop
12240:
12241: IecCloseBecauseStopKey:
12242: jsr IecClose
12243:
12244: lda #0
12245: sec
12246: rts
12247:
12248:
12249: SAVE_NoStop:
12250: jsr Increment_zSAL_Address
12251: bne SAVE_Loop
12252:
12253:
12254: SAVE_End:
12255: jsr iUNLSN
12256:
12257: IecClose:
12258:
12259: bit zSA
12260: bmi SAVE_ClcRts
12261:
12262: lda zFA
12263: jsr iLISTEN
12264:
12265: lda zSA
12266: and #$EF
12267: ora #IEEE_CLOSE
12268: jsr iSECOND
12269:
12270: DoUnlistenClcRts:
12271: jsr iUNLSN
12272:
12273: SAVE_ClcRts:
12274: clc
12275: rts
12276:
12277:
12278: SaveTapeOrRs232:
12279:
12280: .ifdef JIFFY
12281:
12282: LF659: lda zNDX
12283: beq SAVE_KErrFileNameMissing
12284: lda #$02
12285: sta zSA
12286: ldx #$74
12287: ldy #$F6
12288: jsr kSETNAM
12289: jmp KLOAD_FileNameGiven
12290: LF66B: ldx #$33
12291: ldy #$04
12292: jmp JDLF932
12293:
12294: .byte $40, $24, $3a, $2a, $0d, $00, $2f, $00
12295: .byte $5e, $00, $25, $00, $40, $44, $00, $40
12296: .byte $54, $00, $5f, $00, $40, $20, $20, $22
12297: .byte $53, $3a, $00
12298:
12299: .else
12300:
12301:
12302:
12303:
12304: .if CompileComputer >= C64_GENERAL
12305: lsr a
12306: bcs @Tape
12307: jmp KErrIllegalDeviceNumber
12308: .else
12309: cmp #FILE_RS232
12310: bne @Tape
12311: jmp Rs232ErrIllegalDeviceNumber
12312: .endif
12313:
12314: @Tape:
12315: jsr TapeGetPointer
12316: bcc SaveErrIllegalDeviceNumber
12317:
12318: jsr TapePressRecordAndPlayOnTape
12319: bcs SAVE_Rts
12320:
12321: jsr OutputSaving
12322:
12323:
12324:
12325: ldx #TAPE_BUFFER_TYPE_ABSOLUTE
12326:
12327: lda zSA
12328: and #$01
12329: bne :+
12330:
12331: ldx #TAPE_BUFFER_TYPE_BASIC
12332:
12333: : txa
12334: jsr TapeCreateFileBuffer
12335: bcs SAVE_Rts
12336:
12337: jsr TapeWriteCompleteFile
12338: bcs SAVE_Rts
12339:
12340:
12341: lda zSA
12342: and #$02
12343: beq @ClcRts
12344:
12345: lda #TAPE_BUFFER_TYPE_EOT
12346: jsr TapeCreateFileBuffer
12347:
12348: .byte ASM_BIT2
12349:
12350: .endif
12351:
12352: @ClcRts:
12353: clc
12354: SAVE_Rts:
12355: rts
12356:
12357:
12358: OutputSaving:
12359: lda zNSGFLG
12360: bpl SAVE_Rts
12361:
12362: ldy #StrSaving - LMESSAGES
12363: jsr OutputMessage
12364:
12365: jmp OutputFilename
12366:
12367:
12368:
12369:
12370:
12371:
12372:
12373:
12374:
12375:
12376:
12377:
12378:
12379:
12380:
12381:
12382:
12383:
12384:
12385:
12386:
12387:
12388:
12389:
12390:
12391:
12392:
12393: iUDTIM:
12394: ldx #0
12395:
12396: inc zTIME + 2
12397: bne @CheckOverflow
12398:
12399: inc zTIME + 1
12400: bne @CheckOverflow
12401:
12402: inc zTIME
12403:
12404: @CheckOverflow:
12405:
12406:
12407:
12408:
12409:
12410: sec
12411: lda zTIME + 2
12412: sbc #<((24*60*60*60)+1)
12413: lda zTIME + 1
12414: sbc #>((24*60*60*60)+1)
12415: lda zTIME
12416: sbc #^((24*60*60*60)+1)
12417:
12418:
12419: bcc iUDTIM_CheckRunStop
12420:
12421:
12422: stx zTIME
12423: stx zTIME + 1
12424: stx zTIME + 2
12425:
12426: iUDTIM_CheckRunStop:
12427:
12428:
12429:
12430:
12431: lda KEYB_COL_FOR_STOP
12432: cmp KEYB_COL_FOR_STOP
12433: bne iUDTIM_CheckRunStop
12434:
12435: .if CompileComputer >= C64_GENERAL
12436: tax
12437: bmi @StoreStop
12438: ldx #KEYB_ROW_STOP
12439: stx KEYB_ROW
12440: @Debounce:
12441: ldx KEYB_COL_FOR_STOP
12442: cpx KEYB_COL_FOR_STOP
12443: bne @Debounce
12444: sta KEYB_ROW
12445: inx
12446: bne @Rts
12447: .endif
12448:
12449: @StoreStop:
12450: sta zSTKEY
12451: @Rts:
12452: rts
12453:
12454:
12455:
12456:
12457:
12458:
12459:
12460:
12461:
12462:
12463:
12464:
12465:
12466:
12467:
12468:
12469:
12470:
12471:
12472:
12473:
12474:
12475:
12476:
12477:
12478:
12479:
12480:
12481: iRDTIM:
12482: sei
12483:
12484:
12485: lda zTIME + 2
12486: ldx zTIME + 1
12487: ldy zTIME
12488:
12489:
12490:
12491:
12492:
12493:
12494:
12495:
12496:
12497:
12498:
12499:
12500:
12501:
12502:
12503:
12504:
12505:
12506:
12507:
12508:
12509:
12510:
12511:
12512:
12513:
12514:
12515:
12516:
12517:
12518:
12519:
12520:
12521:
12522:
12523:
12524: iSETTIM:
12525: sei
12526:
12527:
12528: sta zTIME + 2
12529: stx zTIME + 1
12530: sty zTIME
12531:
12532: cli
12533:
12534: rts
12535:
12536:
12537:
12538:
12539:
12540:
12541:
12542:
12543:
12544:
12545:
12546:
12547:
12548:
12549:
12550:
12551:
12552:
12553:
12554:
12555:
12556:
12557:
12558:
12559:
12560:
12561:
12562:
12563:
12564:
12565:
12566:
12567: KSTOP:
12568: lda zSTKEY
12569: cmp #KEYB_CHECK_STOP
12570: bne @Rts
12571:
12572: php
12573:
12574: jsr kCLRCHN
12575:
12576: sta zNDX
12577:
12578: plp
12579:
12580: @Rts: rts
12581:
12582:
12583:
12584:
12585:
12586:
12587:
12588:
12589:
12590:
12591:
12592:
12593:
12594:
12595:
12596:
12597:
12598:
12599:
12600:
12601:
12602:
12603:
12604:
12605:
12606:
12607:
12608:
12609: KErrTooManyOpenFiles:
12610: lda #$01
12611: .byte ASM_BIT3
12612:
12613: KErrFileOpen:
12614: lda #$02
12615: .byte ASM_BIT3
12616:
12617: KErrFileNotOpen:
12618: lda #$03
12619: .byte ASM_BIT3
12620:
12621: KErrFileNotFound:
12622: lda #$04
12623: .byte ASM_BIT3
12624:
12625: KErrDeviceNotPresent:
12626: lda #$05
12627: .byte ASM_BIT3
12628:
12629: KErrNotInputFile:
12630: lda #$06
12631: .byte ASM_BIT3
12632:
12633: KErrNotOutputFile:
12634: lda #$07
12635: .byte ASM_BIT3
12636:
12637: KErrFileNameMissing:
12638: lda #$08
12639: .byte ASM_BIT3
12640:
12641: KErrIllegalDeviceNumber:
12642: lda #$09
12643:
12644: pha
12645: jsr kCLRCHN
12646: ldy #StrIoError - LMESSAGES
12647:
12648: bit zNSGFLG
12649: bvc @NoOutput
12650:
12651: jsr OutputMessage
12652:
12653: pla
12654: pha
12655:
12656: ora #'0'
12657: jsr kCHROUT
12658:
12659: @NoOutput:
12660: pla
12661: sec
12662: rts
12663:
12664: .ifdef JIFFY
12665:
12666:
12667:
12668:
12669:
12670:
12671:
12672:
12673: TapeIrqRead=$F92C
12674: TapeIrqWrite=$FBCD
12675: TapeIrqWritePreamble=$FC6A
12676:
12677:
12678: JDLF72C:
12679: ldy #$0C
12680: jsr zCHRGOT
12681: JDLF731:
12682: cmp JDLF7DD,y
12683: beq JDLF739
12684: dey
12685: bpl JDLF731
12686: JDLF739:
12687: rts
12688: JDLF73A:
12689: jsr kSETLFS
12690: JDLF73D:
12691: clc
12692: php
12693: ldx zFSBLK
12694: cpx #$08
12695: bcc JDLF749
12696: JDLF745:
12697: cpx #$1F
12698: bcc JDLF750
12699: JDLF749:
12700: plp
12701: bcs JDLF761
12702: sec
12703: php
12704: ldx #$08
12705: JDLF750:
12706: stx zFSBLK
12707: jsr LF2D9
12708: bcc JDLF75A
12709: inx
12710: bne JDLF745
12711: JDLF75A:
12712: pla
12713: JDLF75B:
12714: rts
12715:
12716: JDLF75C:
12717: jsr LF2DB
12718: bcc JDLF75B
12719: JDLF761:
12720: ldx #$05
12721: JDLF763:
12722: cpx #$0B
12723: beq JDLF76A
12724: JDLF767:
12725: jmp PatchErrorOut
12726: JDLF76A:
12727: jsr JDLF72C
12728: bne JDLF767
12729: sty $27
12730: tax
12731: bmi JDLF776
12732: pla
12733: pla
12734: JDLF776:
12735: jsr JDLF73D
12736: jsr JDLF838
12737: lda $27
12738: ldy #$00
12739: asl a
12740: tax
12741: lda JDLF7F5,x
12742: sta $55
12743: lda JDLF7F6,x
12744: sta $56
12745: JDLF78C:
12746: jsr zJMPER
12747: jsr bDATA
12748: jsr LF2CC
12749: lda zPTR2
12750: jsr kCLOSE
12751: JDLF79A:
12752: jsr kCLRCHN
12753: ldx $13
12754: beq JDLF75B
12755: .byte $2C
12756: JDLF7A2:
12757: ldx #$6F
12758: jmp kCHKOUT
12759: tya
12760: iny
12761: bit $98C8
12762: sty zSA
12763: ldx zTXTTAB
12764: ldy $2C
12765: jsr kLOAD
12766: bcc JDLF7C0
12767: jmp bBIOERR
12768: JDLF7BA:
12769: jmp ChkStatus
12770: JDLF7BD:
12771: jmp JDLE17E
12772: JDLF7C0:
12773: lda $27
12774: cmp #$0B
12775: beq JDLF7BD
12776: bcs JDLF78C
12777: cmp #$08
12778: beq JDLF75B
12779: bcc JDLF7BA
12780: stx zVARTAB
12781: sty $2E
12782: pla
12783: pla
12784: jsr bCRDO
12785: jsr bLINKPRG
12786: jmp bRUN
12787: JDLF7DD:
12788: rti
12789: .byte $5F
12790: rol a
12791: ldy $1222
12792: .byte $2F
12793: lda $5E25
12794: ldx $5C27
12795: .byte $44
12796: jmp $2354
12797: .byte $42
12798: lsr $4F
12799: bvc JDLF844
12800: cli
12801: .byte $47
12802: JDLF7F5:
12803: .byte $33
12804: JDLF7F6:
12805: sbc $59,x
12806: sbc (zCURLIN,x)
12807: .byte $FA
12808: and $2BFA,y
12809: .byte $F7
12810: .byte $2B
12811: .byte $F7
12812: .byte $AB
12813: .byte $F7
12814: .byte $AB
12815: .byte $F7
12816: .byte $A7
12817: .byte $F7
12818: .byte $AB
12819: .byte $F7
12820: .byte $AB
12821: .byte $F7
12822: tax
12823: .byte $F7
12824: .byte $A7
12825: .byte $F7
12826: adc #$F5
12827: .byte $D4
12828: sed
12829: rti
12830: sbc $F1,x
12831: sbc ($2C),y
12832: sbc JDLE4C2,y
12833: and $F8
12834: .byte $97
12835: .byte $FA
12836: ldy $A0FC,x
12837: .byte $FC
12838: bit zROBUF
12839: iny
12840: tya
12841: sta (zTXTTAB),y
12842: jsr bLINKPRG
12843: txa
12844: adc #$02
12845: tax
12846: lda $23
12847: adc #$00
12848: tay
12849: jmp JDLE1A7
12850: JDLF838:
12851: tya
12852: bne JDLF853
12853: sta zFNLEN
12854: jsr zCHRGET
12855: beq JDLF887
12856: ldy #$17
12857: JDLF844:
12858: jsr JDLF731
12859: bne JDLF858
12860: cpy #$0D
12861: bcc JDLF858
12862: sty $27
12863: cpy #$10
12864: bcs JDLF887
12865: JDLF853:
12866: lda #$01
12867: jsr JDLA8FC
12868: JDLF858:
12869: ldy #$FF
12870: JDLF85A:
12871: iny
12872: lda (zTXTPTR),y
12873: beq JDLF867
12874: cmp #$22
12875: beq JDLF872
12876: cmp #$3A
12877: bne JDLF85A
12878: JDLF867:
12879: bit zNSGFLG
12880: bpl JDLF875
12881: clc
12882: jsr LAEBD
12883: jmp JDLF878
12884: JDLF872:
12885: jsr LA8FB
12886: JDLF875:
12887: jsr bFRMEVL
12888: JDLF878:
12889: jsr JDLE25A
12890: jsr zCHRGOT
12891: cmp #$2C
12892: bne JDLF887
12893: jsr bGTBYTC
12894: JDLF885:
12895: stx zFA
12896: JDLF887:
12897: ldy #$00
12898: bit zNSGFLG
12899: bpl JDLF89A
12900: JDLF88D:
12901: lda (zPNT),y
12902: cmp #$20
12903: beq JDLF89A
12904: lda #$0D
12905: jsr CHROUT_SCREEN
12906: bne JDLF88D
12907: JDLF89A:
12908: jsr JDLF75C
12909: lda #$FF
12910: jsr LB475
12911: lda zFNLEN
12912: ldx zFNADR
12913: ldy $BC
12914: jsr JDLB4C7
12915: jsr bFRESTR
12916: stx zFNADR
12917: sty $BC
12918: JDLF8B2:
12919: jsr LF2CF
12920: lda zFNLEN
12921: ldx #$00
12922: stx zFNLEN
12923: ldx #$6F
12924: bne JDLF8C3
12925: JDLF8BF:
12926: ldx #$6E
12927: JDLF8C1:
12928: lda zFNLEN
12929: JDLF8C3:
12930: stx zSA
12931: stx zPTR2
12932: JDLF8C7:
12933: pha
12934: stx zLA
12935: jsr kCLRCHN
12936: jsr kOPEN
12937: pla
12938: sta zFNLEN
12939: JDLF8D3:
12940: rts
12941: jsr JDLF1E8
12942: bne JDLF8D3
12943: ldx #$00
12944: ldy #$22
12945: jsr JDLF8E4
12946: ldy #$05
12947: ldx #$22
12948: JDLF8E4:
12949: jsr JDLF0F4
12950: jmp kCLRCHN
12951: JDLF8EA:
12952: sta CIA2
12953: and #$08
12954: beq JDLF910
12955: lda zBSOUR
12956: ror a
12957: ror a
12958: cpx #$02
12959: bne JDLF910
12960: ldx #$1E
12961: JDLF8FB:
12962: bit CIA2
12963: bpl JDLF905
12964: dex
12965: bne JDLF8FB
12966: beq JDLF90E
12967: JDLF905:
12968: bit CIA2
12969: bpl JDLF905
12970: ora #$40
12971: sta zTSFCNT
12972: JDLF90E:
12973: ldx #$02
12974: JDLF910:
12975: rts
12976: JDLF911:
12977: ldy #$00
12978: jsr JDLF0E2
12979: JDLF916:
12980: jsr JDLFCA9
12981: bvs JDLF91D
12982: bcc JDLF916
12983: JDLF91D:
12984: sty zFNLEN
12985: lda zSTATUS
12986: and #$82
12987: rts
12988: jsr bGTBYTC
12989: txa
12990: ldx #$2D
12991: bne JDLF930
12992: JDLF92C:
12993: lda #$85
12994: ldx #$27
12995: JDLF930:
12996: ldy #$06
12997: JDLF932:
12998: pha
12999: jsr JDLF0F4
13000: pla
13001: jmp kCHROUT
13002: JDLF93A:
13003: ldx #$00
13004: .byte $2C
13005: JDLF93D:
13006: ldx #$06
13007: jsr bSTXPT
13008: ldy #$05
13009: lda (zTXTPTR),y
13010: cmp #$12
13011: bne JDLF9B0
13012: pla
13013: txa
13014: pha
13015: ldy #$23
13016: JDLF94F:
13017: ldx #$22
13018: jsr JDLA917
13019: dey
13020: jsr LA8FB
13021: pla
13022: pha
13023: beq JDLF96C
13024: sta zPNTR
13025: ldy #$01
13026: JDLF960:
13027: iny
13028: jsr JDLF16A
13029: cmp (zTXTPTR),y
13030: bne JDLF977
13031: sbc #$22
13032: bne JDLF960
13033: JDLF96C:
13034: tay
13035: lda (zTXTPTR),y
13036: eor #$0A
13037: sta (zTXTPTR),y
13038: ldy #$04
13039: sta (zPNT),y
13040: JDLF977:
13041: jsr bDATA
13042: ldy #$05
13043: sec
13044: lda (zTXTPTR),y
13045: sbc #$42
13046: bne JDLF94F
13047: ldy #$02
13048: sta (zTXTPTR),y
13049: pla
13050: beq JDLF98D
13051: lda #$8D
13052: rts
13053: JDLF98D:
13054: jmp LA6A4
13055: JDLF990:
13056: bit zNSGFLG
13057: bpl JDLF9B0
13058: tsx
13059: ldy $0107,x
13060: cpy #$E1
13061: bne JDLF9B0
13062: cmp #$04
13063: bne JDLF9B2
13064: inc zFSBLK
13065: jsr JDLF73D
13066: lda #$00
13067: jsr LBDCD
13068: jsr bCRDO
13069: jsr JDLF79A
13070: JDLF9B0:
13071: pla
13072: rts
13073: JDLF9B2:
13074: cmp #$01
13075: beq JDLF93A
13076: cmp #$17
13077: beq JDLF93D
13078: ldy zPRTY
13079: bne JDLF9B0
13080: cmp #$8D
13081: bcs JDLF9B0
13082: cmp #$85
13083: bcc JDLF9B0
13084: pla
13085: sbc #$85
13086: tax
13087: beq JDLF9D5
13088: JDLF9CC:
13089: iny
13090: lda (zCMPO),y
13091: bne JDLF9CC
13092: dex
13093: bne JDLF9CC
13094: JDLF9D4:
13095: iny
13096: JDLF9D5:
13097: lda (zCMPO),y
13098: beq JDLF9E2
13099: cmp #$0D
13100: beq JDLF9E4
13101: jsr CHROUT_SCREEN
13102: bne JDLF9D4
13103: JDLF9E2:
13104: sta zQTSW
13105: JDLF9E4:
13106: rts
13107: JDLF9E5:
13108: jsr GETIN_KEYB
13109: pha
13110: ldx zQTSW
13111: bne JDLFA37
13112: ldx zINSRT
13113: bne JDLFA37
13114: cmp #$10
13115: bne JDLF990
13116: lda #$04
13117: jsr kLISTEN
13118: lda VIC + VICII_O_MemControl
13119: and #$02
13120: beq JDLFA03
13121: lda #$07
13122: JDLFA03:
13123: ora #$60
13124: jsr kSECOND
13125: lda zPNTR
13126: pha
13127: lda zTBLX
13128: pha
13129: JDLFA0E:
13130: ldy #$00
13131: sty zQTSW
13132: jsr JDLE50C
13133: inc zLNMX
13134: JDLFA17:
13135: jsr JDLF16A
13136: jsr iCIOUT
13137: cmp #$0D
13138: bne JDLFA17
13139: inx
13140: cpx #$19
13141: bcs JDLFA2D
13142: asl zLNMX
13143: bpl JDLFA0E
13144: inx
13145: bne JDLFA0E
13146: JDLFA2D:
13147: jsr kUNLSN
13148: pla
13149: tax
13150: pla
13151: tay
13152: jsr JDLE50C
13153: JDLFA37:
13154: pla
13155: JDLFA38:
13156: rts
13157: sty zRESHO
13158: jsr JDLF1E8
13159: bne JDLFA38
13160: jsr zCHRGOT
13161: cmp #$52
13162: bne JDLFA5A
13163: JDLFA47:
13164: dec zRESHO
13165: lda zRESHO
13166: jsr LF66B
13167: jsr JDLE4C6
13168: beq JDLFA47
13169: lda #$00
13170: jsr LF66B
13171: lda #$4C
13172: JDLFA5A:
13173: pha
13174: ldx zMYCH
13175: cpx zFA
13176: beq JDLFA37
13177: jsr JDLF885
13178: ldx #$37
13179: ldy #$02
13180: jsr JDLF0F4
13181: jsr OutputFilename
13182: lda #$2C
13183: sta (zFNADR),y
13184: iny
13185: pla
13186: sta (zFNADR),y
13187: iny
13188: lda #$2C
13189: sta (zFNADR),y
13190: iny
13191: lda zRESHO
13192: pha
13193: bne JDLFA83
13194: lda #$57
13195: JDLFA83:
13196: sta (zFNADR),y
13197: iny
13198: sty zFNLEN
13199: ldy #$0C
13200: JDLFA8A:
13201: jsr JDLFAB2
13202: jsr JDLF73D
13203: jsr JDLF8B2
13204: pla
13205: jsr LF541
13206: lda $13
13207: beq JDLFAA7
13208: cmp #$7F
13209: bne JDLFA38
13210: jsr LABB7
13211: lda #$7F
13212: jmp kCLOSE
13213: JDLFAA7:
13214: ldx #$04
13215: jsr zCHRGET
13216: jsr JDLE229
13217: jsr JDLF75C
13218: JDLFAB2:
13219: sty zSA
13220: ldx #$7F
13221: stx $13
13222: lda zFNLEN
13223: jmp JDLF8C7
13224: tax
13225: bne JDLFA8A
13226: lda zNXTBIT
13227: beq JDLFACE
13228: JDLFAC4:
13229: jsr OutputLoadingOrVerify
13230: tsx
13231: lda $0102,x
13232: cmp #$F7
13233: .byte $D0
13234: JDLFACE:
13235: php
13236: lda zEAL
13237: sta $55
13238: lda $AF
13239: sta $56
13240: bit zTSFCNT
13241: bmi JDLFADE
13242: jmp LF4F3
13243: JDLFADE:
13244: sei
13245: ldy #$03
13246: JDLFAE1:
13247: lda $AF,y
13248: pha
13249: dey
13250: bne JDLFAE1
13251: lda VIC + VICII_O_SprEnable
13252: sta zCMPO
13253: jsr JDLF0D8
13254: JDLFAF0:
13255: jsr iUDTIM_CheckRunStop
13256: bpl JDLFB27
13257: lda VIC + VICII_O_ControlReg1
13258: and #$07
13259: clc
13260: adc #$2F
13261: sta $B1
13262: lda CIA2
13263: and #$07
13264: sta zTAPE1
13265: sta CIA2
13266: ora #$20
13267: tax
13268: JDLFB0C:
13269: bit CIA2
13270: bvc JDLFB0C
13271: bpl JDLFB3E
13272: ldx #$64
13273: JDLFB15:
13274: bit CIA2
13275: bvc JDLFB20
13276: dex
13277: bne JDLFB15
13278: lda #$42
13279: .byte $2C
13280: JDLFB20:
13281: lda #$40
13282: jsr SetStatus
13283: clc
13284: .byte $24
13285: JDLFB27:
13286: sec
13287: lda zCMPO
13288: sta VIC + VICII_O_SprEnable
13289: pla
13290: sta zCMPO
13291: pla
13292: sta $B1
13293: pla
13294: sta zTAPE1
13295: bcs JDLFB3B
13296: jmp KLOAD_UntalkClose
13297:
13298: JDLFB3B:
13299: jmp IecCloseBecauseStopKey
13300: JDLFB3E:
13301: bit CIA2
13302: bpl JDLFB3E
13303: sec
13304: JDLFB44:
13305: lda VIC + VICII_O_Raster
13306: sbc $B1
13307: bcc JDLFB4F
13308: and #$07
13309: beq JDLFB44
13310: JDLFB4F:
13311: lda zTAPE1
13312: stx CIA2
13313: bit CIA2
13314: bvc JDLFAF0
13315: nop
13316: sta CIA2
13317: ora CIA2
13318: lsr a
13319: lsr a
13320: nop
13321: ora CIA2
13322: lsr a
13323: lsr a
13324: eor zTAPE1
13325: eor CIA2
13326: lsr a
13327: lsr a
13328: eor zTAPE1
13329: eor CIA2
13330: cpy zVERCKK
13331: bne JDLFB83
13332: sta (zEAL),y
13333: JDLFB7A:
13334: inc zEAL
13335: bne JDLFB44
13336: inc zEAL + 1
13337: jmp JDLFB44
13338: JDLFB83:
13339: cmp (zEAL),y
13340: beq JDLFB7A
13341: sec
13342: lda #$10
13343: sta zSTATUS
13344: bne JDLFB7A
13345:
13346: Copy_zSTAL_to_zSAL:
13347: lda zSTAL + 1
13348: sta zSAL + 1
13349: lda zSTAL
13350: sta zSAL
13351: rts
13352:
13353:
13354: JDLFB97:
13355: pha
13356: jsr JDLF0D8
13357: jsr JDLFBB4
13358: pla
13359: sta VIC + VICII_O_SprEnable
13360: lda zTBTCNT
13361: rts
13362: JDLFBA5:
13363: lda #$00
13364: jmp JDiACPTR
13365: JDLFBAA:
13366: sei
13367: bit zTSFCNT
13368: bvc JDLFBA5
13369: lda VIC + VICII_O_SprEnable
13370: bne JDLFB97
13371: JDLFBB4:
13372: lda CIA2
13373: cmp #$40
13374: bcc JDLFBB4
13375: and #$07
13376: pha
13377: JDLFBBE:
13378: lda VIC + VICII_O_Raster
13379: sbc VIC + VICII_O_ControlReg1
13380: and #$07
13381: cmp #$07
13382: bcs JDLFBBE
13383: pla
13384: .byte $8D
13385: brk
13386: JDLFBCD:
13387: cmp $A485,x
13388: ora #$20
13389: pha
13390: nop
13391: nop
13392: ora CIA2
13393: lsr a
13394: lsr a
13395: nop
13396: ora CIA2
13397: lsr a
13398: lsr a
13399: eor zTBTCNT
13400: eor CIA2
13401: lsr a
13402: lsr a
13403: eor zTBTCNT
13404: eor CIA2
13405: sta zTBTCNT
13406: pla
13407: bit CIA2
13408: sta CIA2
13409: bvc JDLFC22
13410: bpl JDLFC1D
13411: lda #$42
13412: jmp IecSetStatusAndFreeBus
13413: JDLFBFE:
13414: sei
13415: bit zTSFCNT
13416: bvc JDLFC14
13417: JDLFC03:
13418: lda VIC + VICII_O_SprEnable
13419: beq JDLFC27
13420: pha
13421: jsr JDLF0D8
13422: jsr JDLFC27
13423: pla
13424: sta VIC + VICII_O_SprEnable
13425: rts
13426: JDLFC14:
13427: lda zTSFCNT
13428: cmp #$A0
13429: bcs JDLFC03
13430: jmp IecOutputByte
13431: JDLFC1D:
13432: lda #$40
13433: jsr SetStatus
13434: JDLFC22:
13435: lda zTBTCNT
13436: JDLFC24:
13437: cli
13438: clc
13439: rts
13440: JDLFC27:
13441: txa
13442: pha
13443: lda zBSOUR
13444: and #$F0
13445: pha
13446: lda zBSOUR
13447: and #$0F
13448: tax
13449: JDLFC33:
13450: lda CIA2
13451: bpl JDLFC33
13452: and #$07
13453: sta zBSOUR
13454: sec
13455: JDLFC3D:
13456: lda VIC + VICII_O_Raster
13457: sbc VIC + VICII_O_ControlReg1
13458: and #$07
13459: cmp #$06
13460: bcs JDLFC3D
13461: lda zBSOUR
13462: sta CIA2
13463: pla
13464: ora zBSOUR
13465: sta CIA2
13466: lsr a
13467: lsr a
13468: and #$F0
13469: ora zBSOUR
13470: sta CIA2
13471: lda JDLFC8A,x
13472: ora zBSOUR
13473: sta CIA2
13474: lsr a
13475: lsr a
13476: and #$F0
13477: .byte $05
13478: JDLFC6A:
13479: sta $8D,x
13480: brk
13481: cmp $0F29,x
13482: bit zTSFCNT
13483: bmi JDLFC76
13484: ora #$10
13485: JDLFC76:
13486: sta CIA2
13487: pla
13488: tax
13489: lda zBSOUR
13490: ora #$10
13491: sta CIA2
13492: bit CIA2
13493: bpl JDLFC24
13494: jmp SendTimeout
13495:
13496:
13497:
13498: JDLFC8A:
13499: .byte $00,$80,$20,$A0
13500: .byte $40,$C0,$60,$E0
13501: .byte $10,$90,$30,$B0
13502: .byte $50,$D0,$70,$F0
13503:
13504: JDLFC9A:
13505: jsr JDLF7A2
13506: jmp OutputFilename
13507: jsr bGTBYTC
13508: stx zMYCH
13509: rts
13510: JDLFCA6:
13511: jsr JDLF0E2
13512: JDLFCA9:
13513: jsr kCHRIN
13514: sta (zFNADR),y
13515: iny
13516: bit zSTATUS
13517: bvs JDLFCBB
13518: cpy #$FE
13519: bcs JDLFCBB
13520: cmp #$01
13521: bcs JDLFCA9
13522: JDLFCBB:
13523: rts
13524: ldx #$05
13525: JDLFCBE:
13526: lda LF1A3,x
13527: sta lIERROR,x
13528: dex
13529: JDLFCC5:
13530: bpl JDLFCBE
13531: stx zPRTY
13532: rts
13533: lda zCNTDN
13534: ora ($29,x)
13535: sbc $0185,x
13536:
13537:
13538:
13539:
13540:
13541:
13542:
13543:
13544:
13545:
13546:
13547:
13548:
13549:
13550:
13551:
13552:
13553:
13554:
13555:
13556: HasEndAddressBeenReached:
13557: sec
13558: lda zSAL
13559: sbc zEAL
13560: lda zSAL + 1
13561: sbc zEAL + 1
13562: rts
13563:
13564:
13565:
13566:
13567:
13568:
13569: Increment_zSAL_Address:
13570: inc zSAL
13571: bne @Rts
13572: inc zSAL + 1
13573: @Rts:
13574: rts
13575:
13576:
13577: .else
13578:
13579: TAPE_BUFFER_TYPE_BASIC = $01
13580: TAPE_BUFFER_TYPE_CONTINUATION = $02
13581: TAPE_BUFFER_TYPE_ABSOLUTE = $03
13582: TAPE_BUFFER_TYPE_DATA = $04
13583: TAPE_BUFFER_TYPE_EOT = $05
13584:
13585: TAPE_BUFFER_OFFSET_TYPE = $00
13586: TAPE_BUFFER_OFFSET_SAL_LOW = $01
13587: TAPE_BUFFER_OFFSET_SAL_HIGH = $02
13588: TAPE_BUFFER_OFFSET_EAL_LOW = $03
13589: TAPE_BUFFER_OFFSET_EAL_HIGH = $04
13590: TAPE_BUFFER_OFFSET_FILENAME = $05
13591: TAPE_BUFFER_OFFSET_ENDFILENAME = $15
13592:
13593:
13594: TAPE_TIMER_CONSTANT_BIT0 := $60
13595: TAPE_TIMER_CONSTANT_BIT1 := $B0
13596: TAPE_TIMER_CONSTANT_PREAMBLE := $78
13597: TAPE_TIMER_CONSTANT_WRITE := $0110
13598:
13599: TAPE_RIPRTY_69 := $69
13600: TAPE_RIPRTY_14 := $14
13601:
13602:
13603:
13604: Pass1ReadErrors = zPTR1
13605: Pass2ReadErrors = zPTR2
13606: ReadCharacterError = zRODATA
13607: ReadCharacterIn = zROPRTY
13608: WriteCharacterOut = zROPRTY
13609: NrBlocksRemaining = zINBIT
13610: ByteReceivedFlag = zDPSW
13611: SerialWordBuffer = zMYCH
13612: ReadBitSequenceErrors = zRINONE
13613: ErrorFlagOnTapeRead = zBITC1
13614:
13615:
13616:
13617:
13618:
13619:
13620:
13621:
13622:
13623:
13624:
13625:
13626:
13627:
13628: .if CompileComputer = C64_GS
13629:
13630:
13631: zFB = $fb
13632: zFC = $fc
13633:
13634: L0E00 := $0e00
13635:
13636:
13637: sec
13638: .byte ASM_BIT2
13639:
13640: C64GS_Init:
13641: clc
13642: ror zFB
13643: php
13644: sei
13645:
13646: lda #VICII_B_ControlReg1_RSEL + 3
13647: sta VIC + VICII_O_ControlReg1
13648:
13649: lda #$17
13650: sta VIC + VICII_O_MemControl
13651:
13652: ldx #0
13653:
13654: @ClearLoop:
13655: lda #0
13656: sta COLORRAM,x
13657: sta COLORRAM + $100,x
13658: sta COLORRAM + $200,x
13659: sta COLORRAM + $300,x
13660:
13661: lda #' '
13662: sta lVIDEORAM,x
13663: sta lVIDEORAM + $100,x
13664: sta lVIDEORAM + $200,x
13665: sta lVIDEORAM + $300,x
13666:
13667: inx
13668: bne @ClearLoop
13669:
13670: lda #<(lVIDEORAM + 83)
13671: sta zFC
13672: lda #>(lVIDEORAM + 83)
13673: sta zFC + 1
13674:
13675: ldx #$15
13676: @OuterLoop:
13677: ldy #$21
13678: lda #$A0
13679: @SpaceLoop:
13680: sta (zFC),y
13681: dey
13682: bne @SpaceLoop
13683:
13684: clc
13685: lda zFC
13686: adc #40
13687: sta zFC
13688: bcc :+
13689: inc zFC + 1
13690: :
13691: dex
13692: bne @OuterLoop
13693:
13694: lda #' '
13695: sta lVIDEORAM + 2 * 40 + 36
13696: sta lVIDEORAM + 22 * 40 + 4
13697:
13698: lda #14
13699: ldx #31
13700: @ColorLoop:
13701: sta COLORRAM + 2 * 40 + 4,x
13702: sta COLORRAM + 3 * 40 + 4,x
13703: sta COLORRAM + 4 * 40 + 4,x
13704: sta COLORRAM + 20 * 40 + 4,x
13705: sta COLORRAM + 21 * 40 + 4,x
13706: dex
13707: bpl @ColorLoop
13708:
13709: ldx #<(COLORRAM + 5 * 40 + 4)
13710: stx zFC
13711: ldx #>(COLORRAM + 5 * 40 + 4)
13712: stx zFC + 1
13713:
13714: ldx #$0f
13715: @ColorSetLoop:
13716: lda #$0e
13717: ldy #0
13718: sta (zFC),y
13719: ldy #31
13720: sta (zFC),y
13721:
13722: clc
13723: lda zFC
13724: adc #40
13725: sta zFC
13726: bcc :+
13727: inc zFC + 1
13728: :
13729: dex
13730: bne @ColorSetLoop
13731:
13732: bit zFB
13733: bpl GS_ExtraHandling
13734:
13735: lda #VICII_B_ControlReg1_DEN + VICII_B_ControlReg1_RSEL + 3
13736: sta VIC + VICII_O_ControlReg1
13737:
13738: plp
13739: rts
13740:
13741:
13742: GS_ExtraHandling:
13743: ldx #$00
13744:
13745: @Loop:
13746: lda GS_Data,X
13747: beq LF7D9
13748: sta lVIDEORAM + 129,x
13749: inx
13750: bpl @Loop
13751: ldx #7
13752:
13753: LF7D9:
13754: lda LF8E5,x
13755: sta lVIDEORAM + $3F8,x
13756: dex
13757: bpl LF7D9
13758:
13759:
13760: ldx #$3f
13761: :
13762: lda LF90D,x
13763: sta L0E00,x
13764:
13765: lda LF94D,x
13766: sta L0E00 + $40,x
13767:
13768: lda LF98D,x
13769: sta L0E00 + $80,x
13770:
13771: lda LF9CD,x
13772: sta L0E00 + $C0,x
13773:
13774: lda LFA0D,x
13775: sta L0E00 + $100,x
13776:
13777: lda LFA4D,x
13778: sta L0E00 + $140,x
13779:
13780: lda LFA8D,x
13781: sta L0E00 + $180,x
13782:
13783: dex
13784: bpl :-
13785:
13786:
13787: lda #$04
13788: sta VIC + VICII_O_SprMCM
13789:
13790: lda #$73
13791: sta VIC + VICII_O_SprExpandX
13792:
13793: LF81B:
13794:
13795: ldx #$3f
13796: :
13797: lda LFACD,x
13798: sta L0E00 + $1C0,x
13799:
13800: dex
13801: bpl :-
13802:
13803:
13804: ldx #$0f
13805: :
13806: lda LF8ED,x
13807: sta VIC + VICII_O_SprBackColl,x
13808: lda LF8FD,x
13809: sta VIC,x
13810: dex
13811: bpl :-
13812:
13813: lda #VICII_B_ControlReg1_DEN + VICII_B_ControlReg1_RSEL + 3
13814: sta VIC + VICII_O_ControlReg1
13815:
13816: lda #$BE
13817: sta VIC + VICII_O_SprEnable
13818: jsr LF89F
13819:
13820: lda #$FC
13821: sta VIC + VICII_O_SprEnable
13822: jsr LF8AB
13823:
13824: lda #$BD
13825: sta VIC + VICII_O_SprEnable
13826: jsr LF8A8
13827:
13828: lda #$3D
13829: sta VIC + VICII_O_SprEnable
13830: jsr LF8A8
13831:
13832: LF85C:
13833: inc VIC + VICII_O_Sprite3Y
13834: jsr LF8AE
13835:
13836: ldx VIC + VICII_O_Sprite3Y
13837: cpx #$7c
13838: bcc LF85C
13839:
13840: jsr LF8A8
13841:
13842:
13843: ldx #$3f
13844: :
13845: lda LFB0D,x
13846: sta L0E00 + $1C0,x
13847:
13848: dex
13849: bpl :-
13850:
13851: lda #$05
13852: sta VIC + VICII_O_Spr7Col
13853:
13854: lda #$7C
13855: sta VIC + VICII_O_SprEnable
13856: jsr LF8AB
13857:
13858: lda #$3E
13859: sta VIC + VICII_O_SprEnable
13860: jsr LF8A8
13861:
13862: lda #$BE
13863: sta VIC + VICII_O_SprEnable
13864: jsr LF89F
13865:
13866: lda #$04
13867: sta VIC + VICII_O_SprEnable
13868: jsr LF8A8
13869:
13870: jmp LF81B
13871:
13872: LF89F:
13873: jsr LF8A8
13874: jsr LF8A8
13875: jsr LF8A8
13876:
13877: LF8A8:
13878: ldy #40
13879: .byte ASM_BIT3
13880:
13881: LF8AB:
13882: ldy #$06
13883: .byte ASM_BIT3
13884:
13885: LF8AE:
13886: ldy #$02
13887:
13888: :
13889: jsr LF8BF
13890: dey
13891: bne :-
13892:
13893: jsr CheckCartridge
13894: beq LF8BC
13895: rts
13896:
13897:
13898: LF8BC:
13899: jmp ($FFFC)
13900:
13901: LF8BF:
13902: bit VIC + VICII_O_ControlReg1
13903: bmi LF8BF
13904: :
13905: bit VIC + VICII_O_ControlReg1
13906: bpl :-
13907: rts
13908:
13909: GS_Data:
13910: .byte $c3, $8f, $8d, $8d, $8f, $84, $8f, $92
13911: .byte $85, $a0, $c3, $b6, $b4, $a0, $c7, $81
13912: .byte $8d, $85, $93, $a0, $d3, $99, $93, $94
13913: .byte $85, $8d, $00
13914:
13915: LF8E5:
13916: .byte $38, $39, $3a, $3b, $3c, $3d, $3e, $3f
13917:
13918: LF8ED:
13919: .byte $00, $06, $06, $01, $02, $03, $06, $01
13920: .byte $0f, $0f, $0a, $0f, $0f, $0f, $0f, $02
13921:
13922: LF8FD:
13923: .byte $e0, $7e, $e0, $7e, $43, $43, $94, $64
13924: .byte $90, $82, $60, $82, $e0, $7e, $ac, $a7
13925:
13926: LF90D:
13927: .byte $80, $00, $00
13928: .byte $80, $00, $00
13929: .byte $ff, $c0, $00
13930: .byte $c0, $40, $00
13931: .byte $c0, $40, $00
13932: .byte $c0, $40, $00
13933: .byte $c0, $c0, $00
13934: .byte $c1, $80, $00
13935: .byte $c3, $00, $00
13936: .byte $c6, $00, $60
13937: .byte $cc, $00, $90
13938: .byte $c8, $00, $90
13939: .byte $c8, $40, $90
13940: .byte $c8, $80, $90
13941: .byte $c9, $f8, $60
13942: .byte $c8, $80, $00
13943: .byte $c8, $46, $77
13944: .byte $d8, $09, $44
13945: .byte $f0, $09, $66
13946: .byte $80, $09, $44
13947: .byte $80, $06, $44
13948: .byte $00
13949: LF94D:
13950:
13951: .byte $80, $00, $40
13952: .byte $80, $00, $40
13953: .byte $f0, $00, $40
13954: .byte $d8, $40, $40
13955: .byte $c8, $80, $40
13956: .byte $c9, $f8, $40
13957: .byte $c8, $80, $00
13958: .byte $c8, $43, $24
13959: .byte $c8, $04, $b4
13960: .byte $c8, $04, $ac
13961: .byte $c8, $04, $a4
13962: .byte $cc, $03, $24
13963: .byte $c6, $00, $00
13964: .byte $c3, $00, $00
13965: .byte $c1, $80, $00
13966: .byte $c0, $80, $00
13967: .byte $c0, $80, $00
13968: .byte $c0, $80, $00
13969: .byte $ff, $80, $00
13970: .byte $80, $00, $00
13971: .byte $80, $00, $00
13972: .byte $00
13973: LF98D:
13974:
13975: .byte $00, $00, $00
13976: .byte $00, $00, $00
13977: .byte $00, $00, $00
13978: .byte $01, $54, $00
13979: .byte $05, $54, $00
13980: .byte $05, $54, $00
13981: .byte $15, $54, $00
13982: .byte $15, $02, $a8
13983: .byte $14, $02, $a0
13984: .byte $14, $02, $80
13985: .byte $14, $00, $00
13986: .byte $14, $03, $c0
13987: .byte $14, $03, $f0
13988: .byte $15, $03, $fc
13989: .byte $15, $54, $00
13990: .byte $05, $54, $00
13991: .byte $05, $54, $00
13992: .byte $01, $54, $00
13993: .byte $00, $00, $00
13994: .byte $00, $00, $00
13995: .byte $00, $00, $00
13996: .byte $00
13997:
13998: LF9CD:
13999:
14000: .byte $1f, $ff, $e0
14001: .byte $30, $00, $a0
14002: .byte $3f, $ff, $a0
14003: .byte $3f, $ff, $a0
14004: .byte $20, $00, $a0
14005: .byte $20, $00, $a0
14006: .byte $20, $00, $a0
14007: .byte $3f, $ff, $a0
14008: .byte $3f, $ff, $a0
14009: .byte $3f, $ff, $a0
14010: .byte $3f, $ff, $a0
14011: .byte $3f, $ff, $c0
14012: .byte $3f, $ff, $80
14013: .byte $00, $00, $00
14014: .byte $00, $60, $00
14015: .byte $00, $60, $00
14016: .byte $00, $60, $00
14017: .byte $03, $6c, $00
14018: .byte $01, $f8, $00
14019: .byte $00, $f0, $00
14020: .byte $00, $60, $00
14021: .byte $00
14022:
14023: LFA0D:
14024:
14025: .byte $00, $00, $00
14026: .byte $00, $00, $00
14027: .byte $bf, $ff, $7c
14028: .byte $bf, $ff, $7d
14029: .byte $7f, $fe, $f9
14030: .byte $60, $06, $fb
14031: .byte $df, $ed, $f3
14032: .byte $80, $1d, $f6
14033: .byte $ff, $fb, $e6
14034: .byte $ff, $fb, $ec
14035: .byte $ff, $f7, $cc
14036: .byte $ff, $f7, $d8
14037: .byte $ff, $ef, $98
14038: .byte $ff, $ef, $b0
14039: .byte $ff, $df, $30
14040: .byte $00, $00, $60
14041: .byte $ff, $ff, $60
14042: .byte $ff, $ff, $c0
14043: .byte $ff, $ff, $c0
14044: .byte $00, $00, $00
14045: .byte $00, $00, $00
14046: .byte $00
14047:
14048: LFA4D:
14049:
14050: .byte $00, $00, $00
14051: .byte $00, $00, $00
14052: .byte $03, $ff, $ff
14053: .byte $03, $ff, $ff
14054: .byte $07, $ff, $ff
14055: .byte $07, $ff, $ff
14056: .byte $0f, $ff, $fe
14057: .byte $0f, $ff, $fe
14058: .byte $1f, $ff, $fd
14059: .byte $1f, $ff, $fd
14060: .byte $3f, $ff, $fb
14061: .byte $3f, $ff, $fb
14062: .byte $7f, $ff, $f7
14063: .byte $7f, $ff, $f7
14064: .byte $ff, $ff, $ef
14065: .byte $80, $00, $00
14066: .byte $ff, $ff, $ff
14067: .byte $ff, $ff, $ff
14068: .byte $ff, $ff, $ff
14069: .byte $00, $00, $00
14070: .byte $00, $00, $00
14071: .byte $00
14072:
14073: LFA8D:
14074:
14075: .byte $80, $00, $00
14076: .byte $80, $00, $00
14077: .byte $fe, $00, $00
14078: .byte $c1, $00, $00
14079: .byte $c1, $00, $00
14080: .byte $c2, $00, $00
14081: .byte $c2, $00, $00
14082: .byte $c4, $00, $00
14083: .byte $c4, $00, $00
14084: .byte $c8, $00, $00
14085: .byte $c8, $00, $00
14086: .byte $c8, $00, $00
14087: .byte $c4, $00, $00
14088: .byte $c4, $00, $00
14089: .byte $c2, $00, $00
14090: .byte $c2, $00, $00
14091: .byte $c1, $00, $00
14092: .byte $c1, $00, $00
14093: .byte $fe, $00, $00
14094: .byte $80, $00, $00
14095: .byte $80, $00, $00
14096: .byte $00
14097:
14098: LFACD:
14099:
14100: .byte $00, $00, $00
14101: .byte $e0, $00, $38
14102: .byte $f0, $00, $78
14103: .byte $78, $00, $f0
14104: .byte $3c, $01, $e0
14105: .byte $1e, $03, $c0
14106: .byte $0f, $07, $80
14107: .byte $07, $8f, $00
14108: .byte $03, $de, $00
14109: .byte $01, $fc, $00
14110: .byte $00, $f8, $00
14111: .byte $00, $f8, $00
14112: .byte $01, $fc, $00
14113: .byte $03, $de, $00
14114: .byte $07, $8f, $00
14115: .byte $0f, $07, $80
14116: .byte $1e, $03, $c0
14117: .byte $3c, $01, $e0
14118: .byte $78, $00, $f0
14119: .byte $f0, $00, $78
14120: .byte $e0, $00, $38
14121: .byte $00
14122:
14123: LFB0D:
14124:
14125: .byte $00, $00, $00
14126: .byte $00, $00, $38
14127: .byte $00, $00, $78
14128: .byte $00, $00, $f0
14129: .byte $00, $01, $e0
14130: .byte $00, $03, $c0
14131: .byte $00, $07, $80
14132: .byte $00, $0f, $00
14133: .byte $00, $1e, $00
14134: .byte $00, $3c, $00
14135: .byte $60, $78, $00
14136: .byte $e0, $f0, $00
14137: .byte $e1, $e0, $00
14138: .byte $e3, $c0, $00
14139: .byte $e7, $80, $00
14140: .byte $ef, $00, $00
14141: .byte $fe, $00, $00
14142: .byte $fc, $00, $00
14143: .byte $f8, $00, $00
14144: .byte $f0, $00, $00
14145: .byte $e0, $00, $00
14146: .byte $00
14147:
14148: TapeIrqRead:
14149: TapeIrqWrite:
14150: TapeIrqWritePreamble:
14151: TapeWriteCompleteFile:
14152: TapeReadFileContents:
14153: TapePressRecordAndPlayOnTape:
14154: TapeReadTapeHeaderOfNextFile:
14155: TapeFindSpecificFile:
14156: TapePressPlayOnTape:
14157: TapeCreateFileBuffer:
14158: TapeGetPointer:
14159: TapeWriteCompleteBuffer:
14160: TapeReadNextBuffer:
14161: TAPE_INCREMENT_WRITE_POINTER:
14162:
14163: jmp KErrDeviceNotPresent
14164:
14165:
14166: .segment "KERNAL_GS_8E"
14167:
14168: Copy_zSTAL_to_zSAL:
14169: lda zSTAL + 1
14170: sta zSAL + 1
14171: lda zSTAL
14172: sta zSAL
14173: rts
14174:
14175:
14176:
14177: .segment "KERNAL_GS_00"
14178: .byte "COPYRIGHT 1990 COMMODORE ELECTRONICS LTD. ALL RIGHTS RESERVED."
14179:
14180:
14181: .segment "KERNAL_GS_54"
14182: TapeIrqEnd2:
14183: jmp NMI_End
14184:
14185:
14186:
14187:
14188: .segment "KERNAL_GS_93"
14189:
14190:
14191: .else
14192:
14193:
14194:
14195:
14196:
14197:
14198:
14199:
14200:
14201:
14202:
14203:
14204:
14205:
14206: TapeReadTapeHeaderOfNextFile:
14207:
14208: @ReadNextHeader:
14209: lda zVERCKK
14210: pha
14211:
14212: jsr TapeReadNextBuffer
14213:
14214: pla
14215: sta zVERCKK
14216:
14217: bcs @Rts
14218:
14219: ldy #TAPE_BUFFER_OFFSET_TYPE
14220: lda (zTAPE1),y
14221:
14222: cmp #TAPE_BUFFER_TYPE_EOT
14223: beq @Rts
14224:
14225: cmp #TAPE_BUFFER_TYPE_BASIC
14226: beq @FoundFile
14227:
14228: cmp #TAPE_BUFFER_TYPE_ABSOLUTE
14229: beq @FoundFile
14230:
14231: cmp #TAPE_BUFFER_TYPE_DATA
14232: bne @ReadNextHeader
14233:
14234: @FoundFile:
14235: tax
14236: bit zNSGFLG
14237: bpl @ClcRts
14238:
14239: ldy #StrFound - LMESSAGES
14240: jsr OutputMessage
14241:
14242:
14243: ldy #TAPE_BUFFER_OFFSET_FILENAME
14244:
14245: @OutputFilename:
14246: lda (zTAPE1),y
14247: jsr kCHROUT
14248: iny
14249: cpy #TAPE_BUFFER_OFFSET_ENDFILENAME
14250: bne @OutputFilename
14251:
14252: .if CompileComputer >= C64_02
14253:
14254:
14255:
14256:
14257:
14258: lda zTIME + 1
14259: jsr TapeKeyOrTimeout
14260: nop
14261:
14262: .elseif CompileComputer >= C64_GENERAL
14263:
14264:
14265:
14266:
14267:
14268: @WaitKeyPress:
14269: lda zSTKEY
14270: cmp #$FF
14271: beq @WaitKeyPress
14272: .endif
14273:
14274: @ClcRts:
14275: clc
14276: dey
14277:
14278: @Rts: rts
14279:
14280:
14281:
14282:
14283:
14284: TapeCreateFileBuffer:
14285: sta zPTR1
14286:
14287: jsr TapeGetPointer
14288: bcc @Rts
14289:
14290: lda zSTAL + 1
14291: pha
14292: lda zSTAL
14293: pha
14294: lda zEAL + 1
14295: pha
14296: lda zEAL
14297: pha
14298:
14299:
14300: ldy #lTBUFFR_SIZE - 1
14301: lda #$20
14302: :
14303: sta (zTAPE1),y
14304: dey
14305: bne :-
14306:
14307: lda zPTR1
14308: sta (zTAPE1),y
14309: iny
14310:
14311: lda zSTAL
14312: sta (zTAPE1),y
14313: iny
14314:
14315: lda zSTAL + 1
14316: sta (zTAPE1),y
14317: iny
14318:
14319: lda zEAL
14320: sta (zTAPE1),y
14321: iny
14322:
14323: lda zEAL + 1
14324: sta (zTAPE1),y
14325: iny
14326:
14327: sty zPTR2
14328:
14329:
14330:
14331: ldy #0
14332: sty zPTR1
14333:
14334: @CopyFilename:
14335: ldy zPTR1
14336: cpy zFNLEN
14337: beq @CopyFilenameQuit
14338:
14339: lda (zFNADR),y
14340: ldy zPTR2
14341: sta (zTAPE1),y
14342:
14343: inc zPTR1
14344: inc zPTR2
14345: bne @CopyFilename
14346:
14347:
14348: @CopyFilenameQuit:
14349: jsr TapeSetStartAndEndToBuffer
14350:
14351: lda #TAPE_RIPRTY_69
14352: sta zRIPRTY
14353:
14354: jsr TapeWriteCompleteFileCustomPreamble
14355:
14356: tay
14357:
14358:
14359: pla
14360: sta zEAL
14361: pla
14362: sta zEAL + 1
14363: pla
14364: sta zSTAL
14365: pla
14366: sta zSTAL + 1
14367:
14368: tya
14369: @Rts:
14370: rts
14371:
14372:
14373:
14374:
14375:
14376:
14377:
14378: TapeGetPointer:
14379: ldx zTAPE1
14380: ldy zTAPE1 + 1
14381: cpy #>lBUF
14382: rts
14383:
14384:
14385:
14386: TapeSetStartAndEndToBuffer:
14387: jsr TapeGetPointer
14388:
14389: txa
14390: sta zSTAL
14391:
14392: clc
14393: adc #lTBUFFR_SIZE
14394: sta zEAL
14395:
14396: tya
14397: sta zSTAL + 1
14398: adc #0
14399: sta zEAL + 1
14400: rts
14401:
14402:
14403:
14404:
14405:
14406:
14407:
14408:
14409:
14410:
14411:
14412:
14413:
14414:
14415:
14416:
14417:
14418:
14419:
14420:
14421: TapeFindSpecificFile:
14422:
14423: @NextFile:
14424: jsr TapeReadTapeHeaderOfNextFile
14425: bcs @Rts
14426:
14427: ldy #TAPE_BUFFER_OFFSET_FILENAME
14428: sty zPTR2
14429:
14430: ldy #0
14431: sty zPTR1
14432:
14433: @TestNextChar:
14434: cpy zFNLEN
14435: beq @ClcRts
14436:
14437: lda (zFNADR),y
14438: ldy zPTR2
14439: cmp (zTAPE1),y
14440: bne @NextFile
14441:
14442: inc zPTR1
14443: inc zPTR2
14444:
14445: ldy zPTR1
14446: bne @TestNextChar
14447:
14448:
14449: @ClcRts:
14450: clc
14451: @Rts:
14452: rts
14453:
14454:
14455:
14456:
14457:
14458:
14459:
14460:
14461:
14462:
14463: TAPE_INCREMENT_WRITE_POINTER:
14464: jsr TapeGetPointer
14465: inc zBUFPNT
14466: ldy zBUFPNT
14467: cpy #lTBUFFR_SIZE
14468: rts
14469:
14470:
14471:
14472:
14473: TapePressPlayOnTape:
14474: jsr TapeCheckPlayPressed
14475: beq TapeClcRts
14476:
14477: ldy #StrPlay - LMESSAGES
14478:
14479: TapePressPlayCommon:
14480:
14481: .if CompileComputer = C64_4064
14482: jsr OutputMessageIfAllowed
14483: .else
14484: jsr OutputMessage
14485: .endif
14486:
14487:
14488:
14489: @WaitForPlay:
14490: jsr TapeCheckForStop
14491:
14492: jsr TapeCheckPlayPressed
14493: bne @WaitForPlay
14494:
14495: ldy #StrOk - LMESSAGES
14496:
14497: .if CompileComputer = C64_4064
14498: jmp OutputMessageIfAllowed
14499:
14500: .else
14501: jmp OutputMessage
14502:
14503: .endif
14504:
14505:
14506:
14507:
14508:
14509:
14510:
14511:
14512:
14513:
14514: TapeCheckPlayPressed:
14515: lda #TAPE_B_SENSE
14516: bit TAPE_REG_SENSE
14517: bne TapeClcRts
14518: bit TAPE_REG_SENSE
14519:
14520: TapeClcRts:
14521: clc
14522: rts
14523:
14524:
14525:
14526:
14527: TapePressRecordAndPlayOnTape:
14528: jsr TapeCheckPlayPressed
14529: beq TapeClcRts
14530:
14531: ldy #StrRecPlay - LMESSAGES
14532:
14533: bne TapePressPlayCommon
14534:
14535:
14536:
14537: TapeReadNextBuffer:
14538: lda #0
14539: sta zSTATUS
14540:
14541: sta zVERCKK
14542:
14543: jsr TapeSetStartAndEndToBuffer
14544:
14545: TapeReadFileContents:
14546: jsr TapePressPlayOnTape
14547: bcs LF86E
14548:
14549: sei
14550:
14551:
14552:
14553: lda #$00
14554: sta zRIDATA
14555: sta zBITTS
14556: sta zCMPO
14557: sta zPTR1
14558: sta zPTR2
14559: sta zDPSW
14560:
14561: lda #TAPE_REG_ICR_B_CASSREAD
14562: ldx #(VecTapeIrqRead - TapeIrqVectors) + 8
14563: bne LF875
14564:
14565:
14566:
14567:
14568:
14569: TapeWriteCompleteBuffer:
14570: jsr TapeSetStartAndEndToBuffer
14571:
14572: TapeWriteCompleteFile:
14573: lda #TAPE_RIPRTY_14
14574: sta zRIPRTY
14575: TapeWriteCompleteFileCustomPreamble:
14576: jsr TapePressRecordAndPlayOnTape
14577: LF86E:
14578: bcs TapeSave_ClearIRQtmp_and_RTS
14579:
14580: sei
14581:
14582: lda #TAPE_REG_ICR_B_WR_TIMER
14583: ldx #(VecTapeIrqWritePreamble - TapeIrqVectors) + 8
14584:
14585: LF875:
14586: ldy #TAPE_REG_ICR_B_CLEARALL
14587: sty TAPE_REG_ICR
14588:
14589: sta TAPE_REG_ICR
14590:
14591: .if CompileComputer >= C64_GENERAL
14592:
14593: lda CIA1 + CIA_O_CRA
14594: ora #CIA_CRB_B_FORCE_LOAD | CIA_CRB_B_ONESHOT | CIA_CRB_B_START
14595: sta CIA1 + CIA_O_CRB
14596: and #CIA_CRA_B_50HZ | CIA_CRA_B_FORCE_LOAD | CIA_CRA_B_START
14597: sta lTODSNS
14598: .endif
14599:
14600: jsr LF0A4
14601:
14602: .if CompileComputer >= C64_GENERAL
14603:
14604: lda VIC + VICII_O_ControlReg1
14605: and # ~ VICII_B_ControlReg1_DEN
14606: sta VIC + VICII_O_ControlReg1
14607: .endif
14608:
14609:
14610: lda lCINV
14611: sta lIRQTMP
14612: lda lCINV + 1
14613: sta lIRQTMP + 1
14614:
14615: jsr TapeSetIrqVector
14616:
14617: lda #$02
14618: sta zFSBLK
14619:
14620: jsr TapeInitInputOutputOfByte
14621:
14622:
14623:
14624: lda TAPE_REG_MOTOR
14625: and #TAPE_B_MOTOR_OFF_AND
14626: .if CompileComputer < C64_GENERAL
14627: ora #TAPE_B_MOTOR_OFF_OR
14628: .endif
14629: sta TAPE_REG_MOTOR
14630:
14631: sta zCAS1
14632:
14633:
14634: ldx #$FF
14635: @LF8B5:
14636: ldy #$FF
14637: @LF8B7:
14638: dey
14639: bne @LF8B7
14640: dex
14641: bne @LF8B5
14642:
14643: .if CompileComputer < C64_GENERAL
14644: sta TAPE_TIMER1_HI
14645: .endif
14646: cli
14647:
14648:
14649:
14650:
14651:
14652:
14653: @WaitForFinish:
14654: lda lIRQTMP + 1
14655: cmp lCINV + 1
14656: clc
14657: beq TapeSave_ClearIRQtmp_and_RTS
14658:
14659: jsr TapeCheckForStop
14660:
14661:
14662:
14663: .if CompileComputer >= C64_GENERAL
14664:
14665: jsr iUDTIM_CheckRunStop
14666: .else
14667: lda VIA2_IFR
14668: and #VIA_IFR_B_T1
14669: beq @WaitForFinish
14670: lda VIA1_T1CL
14671: jsr iUDTIM
14672: .endif
14673: jmp @WaitForFinish
14674:
14675:
14676:
14677:
14678:
14679:
14680:
14681: TapeCheckForStop:
14682: jsr kSTOP
14683: clc
14684: bne TapeSaveRts
14685:
14686: jsr TapeStopMotor_and_InitTimer
14687: sec
14688:
14689:
14690: pla
14691: pla
14692:
14693: TapeSave_ClearIRQtmp_and_RTS:
14694:
14695: lda #$00
14696: sta lIRQTMP + 1
14697:
14698: TapeSaveRts:
14699: rts
14700:
14701:
14702:
14703:
14704:
14705:
14706: TapeBitTimingAdjust:
14707:
14708:
14709:
14710: stx zCMPO + 1
14711:
14712:
14713: lda zCMPO
14714: asl a
14715: asl a
14716: clc
14717: adc zCMPO
14718:
14719:
14720: clc
14721: adc zCMPO + 1
14722: sta zCMPO + 1
14723:
14724: lda #$00
14725: bit zCMPO
14726: bmi @LF8F7
14727: rol a
14728: @LF8F7:
14729: asl zCMPO + 1
14730: rol a
14731: asl zCMPO + 1
14732: rol a
14733: tax
14734:
14735: @LF8FE:
14736: lda TAPE_TIMER1_LO
14737: cmp #TAPE_TIMER1_CONST
14738: bcc @LF8FE
14739: adc zCMPO + 1
14740: sta TAPE_TIMER2_LO
14741: txa
14742: adc TAPE_TIMER1_HI
14743: sta TAPE_TIMER2_HI
14744:
14745: .if CompileComputer >= C64_GENERAL
14746: lda lTODSNS
14747: sta CIA1 + CIA_O_CRA
14748: sta lTD1IRQ
14749: lda CIA1 + CIA_O_ICR
14750: and #CIA_ICR_B_FLAG
14751: beq @RetCli
14752: lda #>(@Ret-1)
14753: pha
14754: lda #<(@Ret-1)
14755: pha
14756: jmp FakeIRQ
14757: .endif
14758:
14759: @RetCli:
14760: cli
14761: @Ret:
14762: rts
14763:
14764:
14765:
14766:
14767:
14768:
14769:
14770:
14771:
14772:
14773:
14774:
14775:
14776:
14777:
14778:
14779:
14780:
14781:
14782:
14783:
14784:
14785:
14786:
14787:
14788:
14789:
14790:
14791:
14792:
14793:
14794:
14795:
14796:
14797:
14798:
14799:
14800:
14801:
14802:
14803:
14804:
14805:
14806:
14807:
14808:
14809: TapeIrqRead:
14810:
14811:
14812:
14813:
14814: ldx TAPE_TIMER1_HI
14815:
14816:
14817: ldy #$FF
14818: tya
14819: sbc TAPE_TIMER1_LO
14820:
14821: cpx TAPE_TIMER1_HI
14822:
14823: bne TapeIrqRead
14824:
14825: stx zCMPO + 1
14826:
14827: tax
14828:
14829:
14830:
14831: sty TAPE_TIMER1_LO
14832: sty TAPE_TIMER1_HI
14833:
14834: .if CompileComputer >= C64_GENERAL
14835:
14836:
14837:
14838: lda #CIA_CRB_B_FORCE_LOAD | CIA_CRB_B_ONESHOT | CIA_CRB_B_START
14839: sta CIA1 + CIA_O_CRB
14840:
14841:
14842:
14843: lda TAPE_REG_ICR
14844: sta lTRDTMP
14845:
14846: .endif
14847:
14848: tya
14849: sbc zCMPO + 1
14850: stx zCMPO + 1
14851:
14852:
14853:
14854: lsr a
14855: ror zCMPO + 1
14856: lsr a
14857: ror zCMPO + 1
14858:
14859: lda zCMPO
14860: clc
14861: adc #$3C
14862:
14863: .if CompileComputer < C64_GENERAL
14864: bit VIA2_PA
14865: .endif
14866:
14867: cmp zCMPO + 1
14868:
14869: bcs @LF9AC
14870:
14871: ldx ByteReceivedFlag
14872: beq @LF969
14873: jmp LFA60
14874:
14875:
14876: @LF969:
14877: ldx zTSFCNT
14878: bmi @LF988
14879:
14880:
14881:
14882: ldx #$00
14883: adc #$30
14884: adc zCMPO
14885: cmp zCMPO + 1
14886: bcs @LF993
14887: inx
14888: adc #$26
14889: adc zCMPO
14890: cmp zCMPO + 1
14891: bcs @LF997
14892: adc #$2C
14893: adc zCMPO
14894: cmp zCMPO + 1
14895: bcc @LF98B
14896: @LF988:
14897: jmp @LFA10
14898:
14899:
14900:
14901: @LF98B:
14902: lda zBITTS
14903: beq @LF9AC
14904: sta ErrorFlagOnTapeRead
14905: bne @LF9AC
14906:
14907:
14908:
14909: @LF993:
14910: inc ReadBitSequenceErrors
14911: bcs @LF999
14912: @LF997:
14913: dec ReadBitSequenceErrors
14914: @LF999:
14915: sec
14916: sbc #$13
14917: sbc zCMPO + 1
14918: adc zSVXT
14919: sta zSVXT
14920:
14921: lda zTBTCNT
14922: eor #$01
14923: sta zTBTCNT
14924: beq @LF9D5
14925:
14926: stx zSCHAR
14927:
14928:
14929: @LF9AC:
14930: lda zBITTS
14931: beq @IrqEnd1
14932: .if CompileComputer >= C64_GENERAL
14933: lda lTRDTMP
14934: and #$01
14935: bne @LF9BC
14936: lda lTD1IRQ
14937: bne @IrqEnd1
14938: .else
14939: bit VIA2_IFR
14940: bvc @IrqEnd1
14941: .endif
14942:
14943: @LF9BC:
14944: lda #$00
14945: sta zTBTCNT
14946: .if CompileComputer >= C64_GENERAL
14947: sta lTD1IRQ
14948: .endif
14949: lda zTSFCNT
14950: bpl @LF9F7
14951: bmi @LF988
14952:
14953: @LF9C9:
14954: ldx #$A6
14955: jsr TapeBitTimingAdjust
14956: lda zPRTY
14957: bne @LF98B
14958: @IrqEnd1:
14959: jmp NMI_End
14960:
14961:
14962: @LF9D5:
14963: lda zSVXT
14964: beq @LF9E0
14965: bmi @LF9DE
14966: dec zCMPO
14967: .byte ASM_BIT3
14968: @LF9DE:
14969: inc zCMPO
14970: @LF9E0:
14971: lda #$00
14972: sta zSVXT
14973: cpx zSCHAR
14974: bne @LF9F7
14975: txa
14976: bne @LF98B
14977: lda ReadBitSequenceErrors
14978: bmi @LF9AC
14979: cmp #$10
14980: bcc @LF9AC
14981: sta zSYNO
14982: bcs @LF9AC
14983: @LF9F7:
14984: txa
14985: eor zPRTY
14986: sta zPRTY
14987: lda zBITTS
14988: beq @IrqEnd1
14989: dec zTSFCNT
14990: bmi @LF9C9
14991:
14992: lsr zSCHAR
14993: ror SerialWordBuffer
14994: ldx #$DA
14995: jsr TapeBitTimingAdjust
14996: jmp NMI_End
14997:
14998:
14999: @LFA10:
15000: lda zSYNO
15001: beq @LFA18
15002: lda zBITTS
15003: beq @LFA1F
15004:
15005: @LFA18:
15006: lda zTSFCNT
15007: .if CompileComputer >= C64_GENERAL
15008: bmi @LFA1F
15009: jmp @LF997
15010: .else
15011: bpl @LF997
15012: .endif
15013:
15014: @LFA1F:
15015: lsr zCMPO + 1
15016: lda #$93
15017: sec
15018: sbc zCMPO + 1
15019: adc zCMPO
15020: asl a
15021: tax
15022:
15023: jsr TapeBitTimingAdjust
15024: inc ByteReceivedFlag
15025: lda zBITTS
15026: bne @LFA44
15027: lda zSYNO
15028: beq @IrqEnd2
15029: sta ErrorFlagOnTapeRead
15030: lda #$00
15031: sta zSYNO
15032:
15033: lda #TAPE_REG_ICR_B_SET_3
15034: sta TAPE_REG_ICR
15035:
15036: sta zBITTS
15037:
15038: @LFA44:
15039: lda zSYNO
15040: sta zNXTBIT
15041: beq @LFA53
15042: lda #$00
15043: sta zBITTS
15044:
15045: lda #TAPE_REG_ICR_B_UNSET_3
15046: sta TAPE_REG_ICR
15047:
15048: @LFA53:
15049: lda SerialWordBuffer
15050: sta ReadCharacterIn
15051: lda ErrorFlagOnTapeRead
15052: ora ReadBitSequenceErrors
15053: sta ReadCharacterError
15054: @IrqEnd2:
15055: jmp NMI_End
15056:
15057:
15058:
15059:
15060:
15061: LFA60:
15062: jsr TapeInitInputOutputOfByte
15063: sta ByteReceivedFlag
15064:
15065: ldx #$DA
15066: jsr TapeBitTimingAdjust
15067: lda zFSBLK
15068: beq @LFA70
15069: sta NrBlocksRemaining
15070: @LFA70:
15071: lda #$0F
15072: bit zRIDATA
15073: bpl @LFA8D
15074:
15075: lda zNXTBIT
15076: bne @LFA86
15077:
15078: ldx zFSBLK
15079: dex
15080: bne @IrqEnd3
15081: lda #STATUS_TAPE_LONG_BLOCK
15082: jsr SetStatus
15083: bne @IrqEnd3
15084:
15085: @LFA86:
15086: lda #$00
15087: sta zRIDATA
15088: @IrqEnd3:
15089: jmp NMI_End
15090:
15091:
15092: @LFA8D:
15093: bvs @LFAC0
15094: bne @LFAA9
15095:
15096: lda zNXTBIT
15097: bne @IrqEnd3
15098:
15099: lda ReadCharacterError
15100: bne @IrqEnd3
15101: lda NrBlocksRemaining
15102: lsr a
15103: lda ReadCharacterIn
15104: bmi @LFAA3
15105: bcc @LFABA
15106: clc
15107: @LFAA3:
15108: bcs @LFABA
15109: and #$0F
15110: sta zRIDATA
15111:
15112: @LFAA9:
15113: dec zRIDATA
15114: bne @IrqEnd3
15115: lda #$40
15116: sta zRIDATA
15117: jsr Copy_zSTAL_to_zSAL
15118: lda #$00
15119: sta zRIPRTY
15120: beq @IrqEnd3
15121:
15122:
15123: @LFABA:
15124: lda #$80
15125: sta zRIDATA
15126: bne @IrqEnd3
15127: @LFAC0:
15128: lda zNXTBIT
15129: beq @LFACE
15130:
15131: lda #STATUS_TAPE_SHORT_BLOCK
15132: jsr SetStatus
15133: lda #$00
15134: jmp @LFB4A
15135:
15136: @LFACE:
15137: jsr HasEndAddressBeenReached
15138: bcc @LFAD6
15139: jmp @LFB48
15140:
15141:
15142: @LFAD6:
15143: ldx NrBlocksRemaining
15144: dex
15145:
15146: beq @LFB08
15147:
15148: lda zVERCKK
15149: beq @LFAEB
15150:
15151: ldy #$00
15152: lda ReadCharacterIn
15153: cmp (zSAL),y
15154: beq @LFAEB
15155:
15156: lda #$01
15157: sta ReadCharacterError
15158: @LFAEB:
15159: lda ReadCharacterError
15160: beq @LFB3A
15161:
15162: ldx #$3D
15163: cpx Pass1ReadErrors
15164: bcc @LFB33
15165: ldx Pass1ReadErrors
15166: lda zSAL + 1
15167: sta lSTACK + 1,x
15168: lda zSAL
15169: sta lSTACK,x
15170: inx
15171: inx
15172: stx Pass1ReadErrors
15173: jmp @LFB3A
15174:
15175:
15176:
15177: @LFB08:
15178: ldx Pass2ReadErrors
15179: cpx Pass1ReadErrors
15180: beq @GotAllReadErrors
15181:
15182: lda zSAL
15183: cmp lSTACK,x
15184: bne @GotAllReadErrors
15185: lda zSAL + 1
15186: cmp lSTACK + 1,x
15187: bne @GotAllReadErrors
15188: inc Pass2ReadErrors
15189: inc Pass2ReadErrors
15190: lda zVERCKK
15191: beq @LFB2F
15192:
15193: lda ReadCharacterIn
15194: ldy #0
15195: cmp (zSAL),y
15196: beq @GotAllReadErrors
15197: iny
15198: sty ReadCharacterError
15199: @LFB2F:
15200: lda ReadCharacterError
15201: beq @LFB3A
15202: @LFB33:
15203: lda #STATUS_VERIFY
15204: jsr SetStatus
15205: bne @GotAllReadErrors
15206:
15207: @LFB3A:
15208: lda zVERCKK
15209: bne @GotAllReadErrors
15210: tay
15211: lda ReadCharacterIn
15212: sta (zSAL),y
15213: @GotAllReadErrors:
15214: jsr Increment_zSAL_Address
15215: bne @IrqEnd4
15216: @LFB48:
15217: lda #$80
15218: @LFB4A:
15219: sta zRIDATA
15220:
15221: .if CompileComputer >= C64_GENERAL
15222: sei
15223: ldx #TAPE_REG_ICR_B_UNSET_3
15224: stx TAPE_REG_ICR
15225:
15226: ldx TAPE_REG_ICR
15227: .endif
15228:
15229: ldx zFSBLK
15230: dex
15231: bmi @LFB5C
15232: stx zFSBLK
15233: @LFB5C:
15234: dec NrBlocksRemaining
15235: beq @LFB68
15236:
15237: lda Pass1ReadErrors
15238: bne @IrqEnd4
15239: sta zFSBLK
15240: beq @IrqEnd4
15241:
15242:
15243:
15244:
15245: @LFB68:
15246: jsr TapeStopMotor_and_InitTimer
15247:
15248:
15249: jsr Copy_zSTAL_to_zSAL
15250: ldy #$00
15251: sty zRIPRTY
15252:
15253: @LFB72:
15254: lda (zSAL),y
15255: eor zRIPRTY
15256: sta zRIPRTY
15257: jsr Increment_zSAL_Address
15258: jsr HasEndAddressBeenReached
15259: bcc @LFB72
15260: lda zRIPRTY
15261: eor ReadCharacterIn
15262: beq @IrqEnd4
15263:
15264: lda #STATUS_TAPE_CHKSUM_ERR
15265: jsr SetStatus
15266: @IrqEnd4:
15267: jmp NMI_End
15268:
15269:
15270: Copy_zSTAL_to_zSAL:
15271: lda zSTAL + 1
15272: sta zSAL + 1
15273: lda zSTAL
15274: sta zSAL
15275: rts
15276:
15277:
15278:
15279:
15280:
15281:
15282:
15283: TapeInitInputOutputOfByte:
15284: lda #$08
15285: sta zTSFCNT
15286:
15287: lda #$00
15288: sta zTBTCNT
15289:
15290: sta zBITC1
15291:
15292: sta zPRTY
15293:
15294: sta zRINONE
15295:
15296: rts
15297:
15298:
15299: TapeSetTimerAndWriteEdgeForBit:
15300: lda zROPRTY
15301: lsr a
15302: lda #TAPE_TIMER_CONSTANT_BIT0
15303: bcc TapeSetTimerLowAndWriteEdge
15304:
15305: TapeSetTimerAndWriteEdgeFor1:
15306: lda #TAPE_TIMER_CONSTANT_BIT1
15307:
15308: TapeSetTimerLowAndWriteEdge:
15309: ldx #$00
15310:
15311: TapeSetTimerAndWriteEdge:
15312: sta TAPE_TIMER1_LO
15313: stx TAPE_TIMER1_HI
15314:
15315: .if CompileComputer >= C64_GENERAL
15316: lda TAPE_REG_ICR
15317:
15318: lda #CIA_CRB_B_FORCE_LOAD | CIA_CRB_B_ONESHOT | CIA_CRB_B_START
15319: sta CIA1 + CIA_O_CRB
15320: .endif
15321:
15322:
15323:
15324: lda TAPE_REG_WRITE
15325: eor #TAPE_B_WRITE
15326: sta TAPE_REG_WRITE
15327:
15328: and #TAPE_B_WRITE
15329: rts
15330:
15331:
15332: LFBC8:
15333:
15334: sec
15335: .if CompileComputer >= C64_GENERAL
15336: ror zRODATA
15337: .else
15338: ror zSAL + 1
15339: .endif
15340: bmi TapeIrqEnd1
15341:
15342:
15343: TapeIrqWrite:
15344:
15345: lda zBITC1
15346: bne @LFBE3
15347:
15348: lda #<TAPE_TIMER_CONSTANT_WRITE
15349: ldx #>TAPE_TIMER_CONSTANT_WRITE
15350: jsr TapeSetTimerAndWriteEdge
15351: bne TapeIrqEnd1
15352:
15353: inc zBITC1
15354:
15355:
15356:
15357: .if CompileComputer >= C64_GENERAL
15358: lda zRODATA
15359: .else
15360: lda zSAL + 1
15361: .endif
15362: bpl TapeIrqEnd1
15363:
15364: jmp TapeBlockCompletelyWritten
15365:
15366:
15367: @LFBE3:
15368:
15369:
15370: lda zRINONE
15371: bne @LFBF0
15372:
15373: jsr TapeSetTimerAndWriteEdgeFor1
15374: bne TapeIrqEnd1
15375:
15376: inc zRINONE
15377: bne TapeIrqEnd1
15378:
15379:
15380: @LFBF0:
15381: jsr TapeSetTimerAndWriteEdgeForBit
15382: bne TapeIrqEnd1
15383:
15384:
15385:
15386:
15387:
15388:
15389:
15390:
15391: lda zTBTCNT
15392: eor #$01
15393: sta zTBTCNT
15394:
15395: beq TapeBitWritten
15396:
15397:
15398:
15399:
15400: lda zROPRTY
15401: eor #$01
15402: sta zROPRTY
15403:
15404:
15405: and #$01
15406: eor zPRTY
15407: sta zPRTY
15408:
15409: TapeIrqEnd1:
15410: jmp NMI_End
15411:
15412:
15413: TapeBitWritten:
15414:
15415:
15416: lsr zROPRTY
15417:
15418: dec zTSFCNT
15419:
15420: lda zTSFCNT
15421: beq TapeOutputParityBit
15422:
15423: bpl TapeIrqEnd1
15424:
15425: LFC16:
15426:
15427:
15428:
15429: jsr TapeInitInputOutputOfByte
15430:
15431: cli
15432:
15433:
15434:
15435:
15436:
15437: lda zCNTDN
15438: beq @LFC30
15439:
15440:
15441:
15442: ldx #0
15443: stx zSCHAR
15444:
15445: dec zCNTDN
15446:
15447: ldx zFSBLK
15448: cpx #$02
15449: bne @LFC2C
15450:
15451: ora #$80
15452:
15453: @LFC2C:
15454: sta zROPRTY
15455: bne TapeIrqEnd1
15456:
15457:
15458: @LFC30:
15459: jsr HasEndAddressBeenReached
15460: bcc @ProcessNextByte
15461:
15462: bne LFBC8
15463:
15464: inc zSAL + 1
15465:
15466: lda zSCHAR
15467: sta zROPRTY
15468:
15469: bcs TapeIrqEnd1
15470:
15471:
15472: @ProcessNextByte:
15473: ldy #0
15474: lda (zSAL),y
15475: sta zROPRTY
15476:
15477: eor zSCHAR
15478: sta zSCHAR
15479:
15480: jsr Increment_zSAL_Address
15481:
15482: bne TapeIrqEnd1
15483:
15484:
15485:
15486: TapeOutputParityBit:
15487: lda zPRTY
15488: eor #$01
15489: sta zROPRTY
15490:
15491: TapeIrqEnd2:
15492: jmp NMI_End
15493:
15494:
15495: TapeBlockCompletelyWritten:
15496:
15497:
15498:
15499:
15500: dec zFSBLK
15501: bne :+
15502:
15503: jsr TapeSwitchOffMotor
15504:
15505: : lda #$50
15506: sta zINBIT
15507:
15508:
15509:
15510: ldx #(VecTapeIrqWritePreamble - TapeIrqVectors) + 8
15511: sei
15512: jsr TapeSetIrqVector
15513:
15514: bne TapeIrqEnd2
15515:
15516:
15517:
15518:
15519:
15520: TapeIrqWritePreamble:
15521: lda #TAPE_TIMER_CONSTANT_PREAMBLE
15522: jsr TapeSetTimerLowAndWriteEdge
15523:
15524: bne TapeIrqEnd2
15525:
15526:
15527:
15528:
15529: dec zINBIT
15530: bne TapeIrqEnd2
15531:
15532: jsr TapeInitInputOutputOfByte
15533:
15534: dec zRIPRTY
15535: bpl TapeIrqEnd2
15536:
15537: ldx #(VecTapeIrqWrite - TapeIrqVectors) + 8
15538: jsr TapeSetIrqVector
15539:
15540: cli
15541:
15542: inc zRIPRTY
15543:
15544: lda zFSBLK
15545: beq TapeAllCopiesWritten
15546:
15547: jsr Copy_zSTAL_to_zSAL
15548:
15549: ldx #$09
15550:
15551: stx zCNTDN
15552:
15553: .if CompileComputer >= C64_GENERAL
15554: stx zRODATA
15555: .endif
15556: bne LFC16
15557:
15558:
15559: .endif
15560:
15561:
15562:
15563:
15564:
15565:
15566: TapeStopMotor_and_InitTimer:
15567: php
15568: sei
15569:
15570: .if CompileComputer >= C64_GENERAL
15571:
15572: lda VIC + VICII_O_ControlReg1
15573: ora #VICII_B_ControlReg1_DEN
15574: sta VIC + VICII_O_ControlReg1
15575: .endif
15576:
15577: jsr TapeSwitchOffMotor
15578:
15579: lda #TAPE_REG_ICR_B_CLEARALL
15580: sta TAPE_REG_ICR
15581:
15582: .if CompileComputer < C64_GENERAL
15583:
15584: lda #$F7
15585: sta VIA2_PB
15586: lda #VIA_ACR_B_T1_CONTROL_FREERUN
15587: sta VIA2_ACR
15588: .endif
15589:
15590: jsr iIOINIT_TIMER
15591:
15592:
15593:
15594: lda lIRQTMP + 1
15595: beq :+
15596: sta lCINV + 1
15597:
15598: lda lIRQTMP
15599: sta lCINV
15600: :
15601: plp
15602: rts
15603:
15604:
15605: TapeAllCopiesWritten:
15606: jsr TapeStopMotor_and_InitTimer
15607: beq TapeIrqEnd2
15608:
15609:
15610:
15611:
15612: TapeSetIrqVector:
15613: lda TapeIrqVectors - 8,x
15614: sta lCINV
15615: lda TapeIrqVectors - 8 + 1,x
15616: sta lCINV + 1
15617: rts
15618:
15619:
15620:
15621:
15622: TapeSwitchOffMotor:
15623: lda TAPE_REG_MOTOR
15624: ora #TAPE_B_MOTOR_ON_ALL
15625: sta TAPE_REG_MOTOR
15626: rts
15627:
15628:
15629:
15630:
15631:
15632:
15633:
15634:
15635:
15636:
15637:
15638:
15639:
15640:
15641: HasEndAddressBeenReached:
15642: sec
15643: lda zSAL
15644: sbc zEAL
15645: lda zSAL + 1
15646: sbc zEAL + 1
15647: rts
15648:
15649:
15650:
15651:
15652:
15653:
15654: Increment_zSAL_Address:
15655: inc zSAL
15656: bne @Rts
15657: inc zSAL + 1
15658: @Rts:
15659: rts
15660:
15661:
15662: .endif
15663:
15664:
15665:
15666:
15667:
15668:
15669:
15670: RESET:
15671: ldx #<$01FF
15672: sei
15673: txs
15674: cld
15675: jsr CheckCartridge
15676: bne @NoCartridge
15677: jmp (CART_RESET)
15678:
15679:
15680:
15681: @NoCartridge:
15682: .if CompileComputer >= C64_GENERAL
15683: stx VIC + VICII_O_ControlReg2
15684:
15685:
15686:
15687: jsr iIOINIT
15688: .endif
15689:
15690: jsr iRAMTAS
15691: jsr iRESTOR
15692: .if CompileComputer < C64_GENERAL
15693: jsr iIOINIT
15694: .endif
15695:
15696:
15697: .if CompileComputer >= C64_02
15698: jsr iCINT_WITH_PAL_NTSC
15699: .else
15700: jsr iCINT
15701: .endif
15702: cli
15703: jmp (bRESTART)
15704:
15705:
15706:
15707:
15708:
15709:
15710: CheckCartridge:
15711: ldx #END_Copy_CARTRIDGE_MAGIC - Copy_CARTRIDGE_MAGIC
15712: @CheckNext:
15713: lda Copy_CARTRIDGE_MAGIC - 1,x
15714: cmp CART_MAGIC - 1,x
15715: bne @NoCart
15716: dex
15717: bne @CheckNext
15718: @NoCart:
15719: rts
15720:
15721:
15722:
15723:
15724:
15725: Copy_CARTRIDGE_MAGIC:
15726: .if CompileComputer >= C64_GENERAL
15727: asc80 "CBM"
15728: .byte "80"
15729: .else
15730: .byte "A0"
15731: asc80 "CBM"
15732: .endif
15733: END_Copy_CARTRIDGE_MAGIC:
15734:
15735:
15736:
15737:
15738:
15739:
15740:
15741:
15742:
15743:
15744:
15745:
15746:
15747:
15748:
15749:
15750:
15751:
15752:
15753:
15754:
15755:
15756: iRESTOR:
15757: ldx #<Copy_of_lCINV
15758: ldy #>Copy_of_lCINV
15759: clc
15760:
15761:
15762:
15763:
15764:
15765:
15766:
15767:
15768:
15769:
15770:
15771:
15772:
15773:
15774:
15775:
15776:
15777:
15778:
15779:
15780:
15781:
15782:
15783:
15784:
15785:
15786:
15787:
15788:
15789:
15790:
15791:
15792:
15793:
15794:
15795:
15796:
15797:
15798:
15799:
15800:
15801:
15802:
15803:
15804:
15805:
15806:
15807:
15808:
15809:
15810:
15811:
15812:
15813:
15814:
15815:
15816:
15817:
15818:
15819: iVECTOR:
15820:
15821: stx zMEMUSS
15822: sty zMEMUSS + 1
15823:
15824: ldy #END_Copy_of_lCINV - Copy_of_lCINV - 1
15825: @Loop: lda lCINV,y
15826: bcs @DoSet
15827: lda (zMEMUSS),y
15828: @DoSet: sta (zMEMUSS),y
15829: sta lCINV,y
15830: dey
15831: bpl @Loop
15832: rts
15833:
15834:
15835:
15836: Copy_of_lCINV:
15837: .addr KIRQ
15838: .addr RUNSTOP_RESTORE
15839: .addr KNMI
15840: .addr KOPEN
15841: .addr KCLOSE
15842: .addr KCHKIN
15843: .addr KCHKOUT
15844: .addr KCLRCH
15845: .addr KBASIN
15846: .addr KBSOUT
15847: .addr KSTOP
15848: .addr KGETIN
15849: .addr KCLALL
15850: .addr RUNSTOP_RESTORE
15851: .addr KLOAD
15852: .addr KSAVE
15853: END_Copy_of_lCINV:
15854:
15855:
15856:
15857:
15858:
15859:
15860:
15861:
15862:
15863:
15864:
15865:
15866:
15867:
15868:
15869:
15870:
15871:
15872:
15873:
15874: iRAMTAS:
15875:
15876: lda #0
15877: .if CompileComputer >= C64_GENERAL
15878: tay
15879: .else
15880: tax
15881: .endif
15882:
15883: @MemClearLoop:
15884:
15885: .if CompileComputer >= C64_GENERAL
15886: sta 2,y
15887: sta $200,y
15888: sta $300,y
15889: iny
15890: .else
15891: sta 0,x
15892: sta $200,x
15893: sta $300,x
15894: inx
15895: .endif
15896: bne @MemClearLoop
15897:
15898:
15899: ldx #<lTBUFFR
15900: ldy #>lTBUFFR
15901: stx zTAPE1
15902: sty zTAPE1 + 1
15903:
15904:
15905:
15906:
15907:
15908:
15909: .if CompileComputer >= C64_GENERAL
15910: tay
15911: lda #(>lVIDEORAM)-1
15912: sta zSTAL + 1
15913: @IncHi: inc zSTAL + 1
15914: @Loop: lda (zSTAL),y
15915: tax
15916:
15917: lda #$55
15918: sta (zSTAL),y
15919: cmp (zSTAL),y
15920: bne @NotEqual
15921:
15922: rol a
15923: sta (zSTAL),y
15924: cmp (zSTAL),y
15925: bne @NotEqual
15926:
15927:
15928:
15929:
15930:
15931:
15932:
15933:
15934:
15935:
15936:
15937: txa
15938: sta (zSTAL),y
15939:
15940: .if CompileComputer = C64_GS
15941: nop
15942: bne @IncHi
15943: .else
15944: iny
15945: bne @Loop
15946: .endif
15947: beq @IncHi
15948:
15949:
15950: @NotEqual:
15951: tya
15952: tax
15953: ldy zSTAL + 1
15954: clc
15955: jsr iMEMTOP_Set
15956:
15957: lda #>lBASICRAM
15958: sta lMEMSTR + 1
15959:
15960: lda #>lVIDEORAM
15961: sta lHIBASE
15962: rts
15963:
15964: .else
15965:
15966: sta zSTAL
15967: sta zTEMPX
15968: sta lMEMSTR
15969: tay
15970:
15971: lda #>$0400
15972:
15973:
15974: sta zSTAL + 1
15975:
15976: @MemTestLoop:
15977:
15978:
15979:
15980: inc zSTAL
15981: bne @SkipHighByte
15982: inc zSTAL + 1
15983:
15984: @SkipHighByte:
15985: jsr CheckWritability
15986:
15987: lda zTEMPX
15988: beq @FindMemStart
15989:
15990:
15991:
15992:
15993: bcs @MemTestLoop
15994:
15995:
15996:
15997: ldy zSTAL + 1
15998: ldx zSTAL
15999: cpy #>$2000
16000: bcc @Panic
16001:
16002: cpy #>$2100
16003: bcs @MemConf2
16004:
16005:
16006: ldy #>$1E00
16007: sty lHIBASE
16008:
16009:
16010: @SetMemTop:
16011: jmp iMEMTOP_Set
16012:
16013: @MemConf2:
16014: lda #>$1200
16015: sta lMEMSTR + 1
16016: lda #>$1000
16017: sta lHIBASE
16018: bne @SetMemTop
16019:
16020:
16021: @FindMemStart:
16022:
16023:
16024:
16025: bcc @MemTestLoop
16026:
16027:
16028: lda zSTAL + 1
16029: sta lMEMSTR + 1
16030: sta zTEMPX
16031:
16032: cmp #>$1100
16033: bcc @MemTestLoop
16034:
16035:
16036:
16037:
16038:
16039: @Panic:
16040: jsr SET_VIC_DEFAULTS
16041: jmp @Panic
16042: .endif
16043:
16044:
16045:
16046:
16047: TapeIrqVectors:
16048:
16049: .if CompileComputer = C64_GS
16050: .addr NMI_End
16051: .addr NMI_End
16052: .addr NMI_End
16053: .addr NMI_End
16054: .else
16055:
16056: VecTapeIrqWritePreamble:
16057: .addr TapeIrqWritePreamble
16058: VecTapeIrqWrite:
16059: .addr TapeIrqWrite
16060: VecKIRQ:
16061: .addr KIRQ
16062: VecTapeIrqRead:
16063: .addr TapeIrqRead
16064:
16065: .endif
16066:
16067:
16068:
16069:
16070:
16071:
16072:
16073:
16074:
16075:
16076:
16077:
16078:
16079:
16080:
16081:
16082:
16083:
16084:
16085: iIOINIT:
16086: .if CompileComputer >= C64_GENERAL
16087:
16088:
16089:
16090:
16091: lda #~CIA_ICR_BW_SET
16092: sta CIA1 + CIA_O_ICR
16093: sta CIA2 + CIA_O_ICR
16094:
16095:
16096: sta CIA1 + CIA_O_PA
16097:
16098:
16099: lda #CIA_CRA_B_ONESHOT
16100: sta CIA1 + CIA_O_CRA
16101: sta CIA2 + CIA_O_CRA
16102:
16103: sta CIA1 + CIA_O_CRB
16104: sta CIA2 + CIA_O_CRB
16105:
16106:
16107: ldx #$00
16108: stx CIA1 + CIA_O_DDRB
16109: stx CIA2 + CIA_O_DDRB
16110:
16111: stx SID + SID_O_FiltMode
16112:
16113:
16114: dex
16115: stx CIA1 + CIA_O_DDRA
16116:
16117:
16118: lda #CIA2_PA_B_VA14 | CIA2_PA_B_VA15 | CIA2_PA_B_RS232_TXD
16119: sta CIA2 + CIA_O_PA
16120:
16121: lda #CIA2_PA_B_VA14 | CIA2_PA_B_VA15 | CIA2_PA_B_RS232_TXD | CIA2_PA_B_IEC_ATN_OUT | CIA2_PA_B_IEC_CLK_OUT | CIA2_PA_B_IEC_DATA_OUT
16122: sta CIA2 + CIA_O_DDRA
16123:
16124: lda #P6510_B_LORAM | P6510_B_HIRAM | P6510_B_CHAREN | P6510_B_CASS_MOTOR | P6510_B_UNUSED
16125: sta zR6510
16126: lda #P6510_B_LORAM | P6510_B_HIRAM | P6510_B_CHAREN | P6510_B_CASS_WRITE | P6510_B_CASS_MOTOR
16127:
16128: sta zD6510
16129:
16130: iIOINIT_TIMER:
16131: .if CompileComputer >= C64_02
16132: lda lTVSFLG
16133: beq LFDEC
16134: lda #<DEFAULT_INIT_VALUE_CIA1_TA_PAL
16135: .else
16136: lda #<DEFAULT_INIT_VALUE_CIA1_TA_1MHZ
16137: .endif
16138: sta CIA1 + CIA_O_TALO
16139:
16140: .if CompileComputer >= C64_02
16141: lda #>DEFAULT_INIT_VALUE_CIA1_TA_PAL
16142: jmp LFDF3
16143: LFDEC: lda #<DEFAULT_INIT_VALUE_CIA1_TA_NTSC
16144: sta CIA1 + CIA_O_TALO
16145: lda #>DEFAULT_INIT_VALUE_CIA1_TA_NTSC
16146: LFDF3: sta CIA1 + CIA_O_TAHI
16147: .else
16148: lda #>DEFAULT_INIT_VALUE_CIA1_TA_1MHZ
16149: sta CIA1 + CIA_O_TAHI
16150: .endif
16151:
16152: .macro IOINIT_PATCH
16153: lda #CIA_ICR_BW_SET |CIA_ICR_B_TA
16154: sta CIA1 + CIA_O_ICR
16155: lda CIA1 + CIA_O_CRA
16156: and #CIA_CRA_B_50HZ
16157: ora #CIA_CRA_B_FORCE_LOAD | CIA_CRA_B_START
16158: sta CIA1 + CIA_O_CRA
16159: jmp IecClkSet
16160: .endmacro
16161:
16162: .if CompileComputer >= C64_02
16163: jmp Patch_IOINIT
16164: .else
16165: IOINIT_PATCH
16166: .endif
16167:
16168: .else
16169:
16170:
16171: lda #$7F
16172: sta VIA1_IEC
16173: sta VIA2_IEC
16174: lda #$40
16175: sta VIA2_ACR
16176: lda #$40
16177: sta VIA1_ACR
16178: lda #$FE
16179: sta VIA1_PCR
16180: lda #$DE
16181: sta VIA2_PCR
16182: ldx #$00
16183: stx VIA1_DDRB
16184: ldx #$FF
16185: stx VIA2_DDRB
16186: ldx #$00
16187: stx VIA2_DDRA
16188: ldx #$80
16189: stx VIA1_DDRA
16190: ldx #$00
16191: stx VIA1_PA_NO_HS
16192: jsr IecClkClear
16193: lda #$82
16194: sta VIA1_IEC
16195: jsr IecClkSet
16196:
16197:
16198: iIOINIT_TIMER:
16199: lda #$C0
16200: sta VIA2_IEC
16201: lda #<DEFAULT_VIA2_T1
16202: sta VIA2_T1CL
16203: lda #>DEFAULT_VIA2_T1
16204: sta VIA2_T1CH
16205: rts
16206:
16207: .endif
16208:
16209:
16210:
16211:
16212:
16213:
16214:
16215:
16216:
16217:
16218:
16219:
16220:
16221:
16222:
16223:
16224:
16225:
16226:
16227:
16228:
16229:
16230:
16231:
16232:
16233:
16234:
16235:
16236:
16237:
16238:
16239:
16240:
16241:
16242:
16243: iSETNAM:
16244: sta zFNLEN
16245: stx zFNADR
16246: sty zFNADR + 1
16247: rts
16248:
16249:
16250:
16251:
16252:
16253:
16254:
16255:
16256:
16257:
16258:
16259:
16260:
16261:
16262:
16263:
16264:
16265:
16266:
16267:
16268:
16269:
16270:
16271:
16272:
16273:
16274:
16275:
16276:
16277:
16278:
16279:
16280:
16281:
16282:
16283:
16284:
16285:
16286:
16287:
16288:
16289:
16290:
16291:
16292:
16293:
16294:
16295:
16296:
16297:
16298:
16299:
16300:
16301:
16302:
16303: iSETLFS:
16304: sta zLA
16305: stx zFA
16306: sty zSA
16307: rts
16308:
16309:
16310:
16311:
16312:
16313:
16314:
16315:
16316:
16317:
16318:
16319:
16320:
16321:
16322:
16323:
16324:
16325:
16326:
16327:
16328:
16329:
16330:
16331:
16332:
16333:
16334:
16335:
16336:
16337:
16338:
16339:
16340:
16341:
16342:
16343:
16344:
16345:
16346:
16347:
16348:
16349:
16350:
16351:
16352:
16353:
16354:
16355:
16356:
16357:
16358:
16359:
16360:
16361:
16362:
16363:
16364:
16365:
16366:
16367: iREADST:
16368: lda zFA
16369: cmp #FILE_RS232
16370: bne iREADST_Normal
16371:
16372:
16373:
16374:
16375:
16376: lda lRSSTAT
16377: .if CompileComputer >= C64_GENERAL
16378: pha
16379:
16380:
16381:
16382:
16383: .endif
16384: lda #$00
16385: sta lRSSTAT
16386: .if CompileComputer >= C64_GENERAL
16387: pla
16388:
16389:
16390:
16391:
16392: .endif
16393: rts
16394:
16395:
16396:
16397:
16398:
16399:
16400:
16401:
16402:
16403:
16404:
16405:
16406:
16407:
16408:
16409:
16410:
16411:
16412:
16413:
16414:
16415:
16416:
16417:
16418:
16419:
16420:
16421:
16422:
16423:
16424:
16425:
16426:
16427:
16428: iSETMSG:
16429: sta zNSGFLG
16430:
16431:
16432:
16433: iREADST_Normal:
16434: lda zSTATUS
16435: SetStatus:
16436: ora zSTATUS
16437: sta zSTATUS
16438: rts
16439:
16440:
16441:
16442:
16443:
16444:
16445:
16446:
16447:
16448:
16449:
16450:
16451:
16452:
16453:
16454:
16455:
16456:
16457:
16458:
16459:
16460:
16461:
16462:
16463:
16464:
16465:
16466:
16467:
16468:
16469:
16470:
16471:
16472:
16473:
16474:
16475:
16476:
16477:
16478:
16479:
16480:
16481:
16482: iSETTMO:
16483: sta lTIMOUT
16484: rts
16485:
16486:
16487:
16488:
16489:
16490:
16491:
16492:
16493:
16494:
16495:
16496:
16497:
16498:
16499:
16500:
16501:
16502:
16503:
16504:
16505:
16506:
16507:
16508:
16509:
16510:
16511:
16512: iMEMTOP:
16513: bcc iMEMTOP_Set
16514: iMEMTOP_Get:
16515: ldx lMEMSIZ
16516: ldy lMEMSIZ + 1
16517: iMEMTOP_Set:
16518: stx lMEMSIZ
16519: sty lMEMSIZ + 1
16520: rts
16521:
16522:
16523:
16524:
16525:
16526:
16527:
16528:
16529:
16530:
16531:
16532:
16533:
16534:
16535:
16536:
16537:
16538:
16539:
16540:
16541:
16542:
16543:
16544:
16545:
16546:
16547:
16548:
16549:
16550:
16551:
16552:
16553:
16554:
16555:
16556:
16557:
16558:
16559:
16560:
16561: iMEMBOT:
16562: bcc @Set
16563:
16564: ldx lMEMSTR
16565: ldy lMEMSTR + 1
16566:
16567: @Set: stx lMEMSTR
16568: sty lMEMSTR + 1
16569: rts
16570:
16571:
16572: .if CompileComputer < C64_GENERAL
16573:
16574:
16575:
16576:
16577:
16578:
16579:
16580:
16581:
16582: CheckWritability:
16583: lda (zSTAL),y
16584: tax
16585:
16586: lda #$55
16587: sta (zSTAL),y
16588: cmp (zSTAL),y
16589: bne @NotEqual
16590:
16591: ror a
16592: sta (zSTAL),y
16593: cmp (zSTAL),y
16594: bne @NotEqual
16595:
16596: .byte $A9
16597:
16598: @NotEqual:
16599: clc
16600:
16601: txa
16602: sta (zSTAL),y
16603: rts
16604: .endif
16605:
16606:
16607:
16608:
16609: NMI: sei
16610: jmp (lNMINV)
16611:
16612: KNMI: pha
16613: txa
16614: pha
16615: tya
16616: pha
16617:
16618: .if CompileComputer >= C64_GENERAL
16619:
16620: lda #~CIA_ICR_BW_SET
16621: sta CIA2 + CIA_O_ICR
16622:
16623:
16624: ldy CIA2 + CIA_O_ICR
16625: bmi NMI_FROM_IO
16626: .else
16627:
16628: lda VIA1_IFR
16629: bpl LFEFF
16630: and VIA1_IEC
16631: tax
16632: and #$02
16633: beq NMI_FROM_IO
16634: .endif
16635:
16636: jsr CheckCartridge
16637: bne @NoCartridge
16638: jmp (CART_NMI)
16639:
16640: @NoCartridge:
16641: .if CompileComputer >= C64_GENERAL
16642: jsr iUDTIM_CheckRunStop
16643: .else
16644: bit VIA1_PA
16645: jsr iUDTIM
16646: .endif
16647: jsr kSTOP
16648: bne LFEFF
16649:
16650: RUNSTOP_RESTORE:
16651: jsr iRESTOR
16652: jsr iIOINIT
16653: jsr iCINT
16654: jmp (bRESTART + 2)
16655:
16656: NMI_FROM_IO:
16657:
16658: .if CompileComputer >= C64_GENERAL
16659: LFEFF:
16660:
16661:
16662:
16663:
16664: tya
16665: and lENABL
16666: tax
16667:
16668: and #CIA_ICR_B_TA
16669: beq @NoTimerAUnderflow
16670:
16671: lda RS232_TXD_REG
16672: and #~CIA2_PA_B_RS232_TXD
16673: ora zNXTBIT
16674: sta RS232_TXD_REG
16675:
16676:
16677: lda lENABL
16678: sta CIA2 + CIA_O_ICR
16679:
16680: txa
16681: and #CIA_ICR_B_FLAG | CIA_ICR_B_TB
16682: beq @Continue
16683:
16684: and #CIA_ICR_B_TB
16685: beq @IntFromFlag
16686:
16687: jsr LFED6
16688: jmp @Continue
16689:
16690: @IntFromFlag:
16691: jsr LFF07
16692:
16693: @Continue:
16694: jsr LEEBB
16695: jmp @ClearAllCIA2Interrupts
16696:
16697: @NoTimerAUnderflow:
16698: txa
16699: and #CIA_ICR_B_TB
16700: beq @NoTimerBUnderflow
16701: jsr LFED6
16702: jmp @ClearAllCIA2Interrupts
16703:
16704: @NoTimerBUnderflow:
16705: txa
16706: and #CIA_ICR_B_FLAG
16707: beq @ClearAllCIA2Interrupts
16708: jsr LFF07
16709:
16710: @ClearAllCIA2Interrupts:
16711:
16712: lda lENABL
16713: sta CIA2 + CIA_O_ICR
16714:
16715: .else
16716:
16717: lda VIA1_IEC
16718: ora #$80
16719: pha
16720: lda #$7F
16721: sta VIA1_IEC
16722: txa
16723: and #$40
16724: beq LFF02
16725: lda #$CE
16726: ora zNXTBIT
16727: sta VIA1_PCR
16728: lda VIA1_T1CL
16729: pla
16730: sta VIA1_IEC
16731: jsr LEEBB
16732: LFEFF:
16733: jmp NMI_End
16734:
16735:
16736: LFF02: txa
16737: and #$20
16738: beq @LFF2C
16739: lda VIA1_PB
16740: and #$01
16741: sta zINBIT
16742: lda VIA1_T2CL
16743: sbc #$16
16744: adc lBAUDOF
16745: sta VIA1_T2CL
16746: lda VIA1_T2CH
16747: adc lBAUDOF + 1
16748: sta VIA1_T2CH
16749: pla
16750: sta VIA1_IEC
16751: jsr LEF59
16752: jmp NMI_End
16753: @LFF2C: txa
16754: and #$10
16755: beq NMI_End
16756: lda lM51CTR
16757: and #$0F
16758: bne @LFF38
16759: @LFF38: asl a
16760: tax
16761: lda LFEC2 - 2,x
16762: sta VIA1_T2CL
16763: lda LFEC2 - 1,x
16764: sta VIA1_T2CH
16765: lda VIA1_PB
16766: pla
16767: ora #$20
16768: and #$EF
16769: sta VIA1_IEC
16770: ldx lBITNUM
16771: stx zBITC1
16772: .endif
16773:
16774: NMI_End:
16775: pla
16776: tay
16777: pla
16778: tax
16779: pla
16780: rti
16781:
16782: LFEC2:
16783:
16784: .if CompileComputer >= C64_GENERAL
16785:
16786: .if CompileComputer >= C64_02
16787: .word $27C1
16788: .word $1A3E
16789: .word $11C5
16790: .word $0E74
16791: .word $0CED
16792: .word $0645
16793: .word $02F0
16794: .word $0146
16795: .word $00B8
16796: .word $0071
16797: .else
16798: .word $26AC
16799: .word $19A7
16800: .word $115D
16801: .word $0E1F
16802: .word $0CA1
16803: .word $061F
16804: .word $02DD
16805: .word $013D
16806: .word $00B2
16807: .word $006C
16808:
16809: .endif
16810:
16811: .else
16812:
16813: .if CompileComputer >= VIC20_07
16814:
16815: .word $2AE6
16816: .word $1C78
16817: .word $1349
16818: .word $0FB1
16819: .word $0E0A
16820: .word $06D3
16821: .word $0338
16822: .word $016A
16823: .word $00D0
16824: .word $0083
16825: .word $0036
16826:
16827: .else
16828:
16829: .word $2792
16830: .word $1A40
16831: .word $11C6
16832: .word $0E74
16833: .word $0CEE
16834: .word $0645
16835: .word $02F1
16836: .word $0146
16837: .word $00B8
16838: .word $0071
16839: .word $002A
16840:
16841: .endif
16842:
16843: .endif
16844:
16845:
16846: .if CompileComputer >= C64_GENERAL
16847: LFED6: lda CIA2 + CIA_O_PB
16848: and #$01
16849: sta zINBIT
16850: lda CIA2 + CIA_O_TBLO
16851: sbc #$1C
16852: adc lBAUDOF
16853: sta CIA2 + CIA_O_TBLO
16854: lda CIA2 + CIA_O_TBHI
16855: adc lBAUDOF + 1
16856: sta CIA2 + CIA_O_TBHI
16857: lda #$11
16858: sta CIA2 + CIA_O_CRB
16859:
16860:
16861: lda lENABL
16862: sta CIA2 + CIA_O_ICR
16863:
16864: lda #$FF
16865: sta CIA2 + CIA_O_TBLO
16866: sta CIA2 + CIA_O_TBHI
16867: jmp LEF59
16868: LFF07:
16869: .if CompileComputer = C64_01
16870: lda lM51CTR
16871: and #$0F
16872: bne LFF1A
16873: .endif
16874: lda lM51AJB
16875: sta CIA2 + CIA_O_TBLO
16876: lda lM51AJB + 1
16877: .if CompileComputer = C64_01
16878: jmp LFF25
16879: LFF1A: asl a
16880: tax
16881: lda LFEC2 - 2,x
16882: sta CIA2 + CIA_O_TBLO
16883: lda LFEC2 - 1,x
16884: LFF25:
16885: .endif
16886: sta CIA2 + CIA_O_TBHI
16887: lda #$11
16888: sta CIA2 + CIA_O_CRB
16889:
16890: lda #CIA_ICR_B_FLAG | CIA_ICR_B_TB
16891: eor lENABL
16892: sta lENABL
16893:
16894: lda #$FF
16895: sta CIA2 + CIA_O_TBLO
16896: sta CIA2 + CIA_O_TBHI
16897: ldx lBITNUM
16898: stx zBITC1
16899: rts
16900:
16901: .if CompileComputer >= C64_02
16902: LFF2E: tax
16903: lda lM51AJB + 1
16904: rol a
16905: tay
16906: txa
16907: adc #<200
16908: sta lBAUDOF
16909: tya
16910: adc #>200
16911: sta lBAUDOF + 1
16912: rts
16913: .endif
16914:
16915: .segment "TapeFakeFiller"
16916: nop
16917: nop
16918:
16919:
16920: .segment "TapeFakeIrq"
16921:
16922:
16923:
16924:
16925:
16926:
16927:
16928:
16929: FakeIRQ:
16930: php
16931:
16932:
16933:
16934: pla
16935: and #~A6502_FLAGS_B
16936: pha
16937:
16938:
16939: .endif
16940:
16941:
16942:
16943:
16944: IRQ: pha
16945: txa
16946: pha
16947: tya
16948: pha
16949:
16950: tsx
16951: lda lSTACK + 4,x
16952: and #A6502_FLAGS_B
16953: beq @isIRQ
16954:
16955: jmp (lCNBINV)
16956:
16957: @isIRQ: jmp (lCINV)
16958:
16959:
16960: .if CompileComputer >= C64_GENERAL
16961: .if CompileComputer >= C64_02
16962:
16963:
16964:
16965:
16966:
16967:
16968:
16969:
16970:
16971:
16972:
16973:
16974:
16975:
16976:
16977:
16978:
16979:
16980:
16981:
16982:
16983:
16984:
16985:
16986:
16987:
16988:
16989:
16990:
16991:
16992:
16993:
16994: iCINT_WITH_PAL_NTSC:
16995: jsr iCINT
16996:
16997: @WaitForRaster:
16998: lda VIC + VICII_O_Raster
16999: bne @WaitForRaster
17000: lda VIC + VICII_O_IRQFlags
17001: and #$01
17002: sta lTVSFLG
17003: jmp iIOINIT_TIMER
17004:
17005:
17006:
17007:
17008: Patch_IOINIT:
17009: IOINIT_PATCH
17010: .endif
17011: .endif
17012:
17013: .if CompileComputer >= C64_GENERAL
17014:
17015:
17016: .segment "KernalJumpTable"
17017:
17018: .byte VERSION_FF80
17019:
17020:
17021:
17022:
17023:
17024:
17025:
17026: kCINT:
17027: .if CompileComputer >= C64_02
17028:
17029:
17030:
17031: jmp iCINT_WITH_PAL_NTSC
17032: .else
17033:
17034: jmp iCINT
17035: .endif
17036:
17037: kIOINIT: jmp iIOINIT
17038: kRAMTAS: jmp iRAMTAS
17039:
17040: .else
17041:
17042:
17043:
17044: .endif
17045:
17046: .segment "KernalJumpTable2"
17047:
17048:
17049:
17050: kRESTOR: jmp iRESTOR
17051: kVECTOR: jmp iVECTOR
17052: kSETMSG: jmp iSETMSG
17053: kSECOND: jmp iSECOND
17054: kTKSA: jmp iTKSA
17055: kMEMTOP: jmp iMEMTOP
17056: kMEMBOT: jmp iMEMBOT
17057: kSCNKEY: jmp iSCNKEY
17058: kSETTMO: jmp iSETTMO
17059: kACPTR:
17060: .ifdef JIFFY
17061: jmp JDLFBAA
17062: .else
17063: jmp iACPTR
17064: .endif
17065: kCIOUT: jmp iCIOUT
17066: kUNTLK: jmp iUNTLK
17067: kUNLSN: jmp iUNLSN
17068: kLISTEN: jmp iLISTEN
17069: kTALK: jmp iTALK
17070: kREADST: jmp iREADST
17071: kSETLFS: jmp iSETLFS
17072: kSETNAM: jmp iSETNAM
17073: kOPEN: jmp (lIOPEN)
17074: kCLOSE: jmp (lICLOSE)
17075: kCHKIN: jmp (lICHKIN)
17076: kCHKOUT: jmp (lICKOUT)
17077: kCLRCHN: jmp (lICLRCH)
17078: kCHRIN: jmp (lIBASIN)
17079: kCHROUT: jmp (lIBSOUT)
17080: kLOAD: jmp iLOAD
17081: kSAVE: jmp iSAVE
17082: kSETTIM: jmp iSETTIM
17083: kRDTIM: jmp iRDTIM
17084: kSTOP: jmp (lISTOP)
17085: kGETIN: jmp (lIGETIN)
17086: kCLALL: jmp (lICLALL)
17087: kUDTIM: jmp iUDTIM
17088: kSCREEN: jmp iSCREEN
17089: kPLOT: jmp iPLOT
17090: kIOBASE: jmp iIOBASE
17091:
17092: .if (CompileComputer >= C64_GENERAL) .AND (.NOT .defined(C64JAPAN))
17093: .byte "RR"
17094: .if CompileComputer = C64_4064
17095: .byte 0,0
17096: .else
17097: .byte "BY"
17098: .endif
17099: .endif
17100:
17101:
17102: .segment "Int6502"
17103:
17104: .addr NMI
17105: .addr RESET
17106: .addr IRQ

c64.a65.full.html; generated on Fri Sep 18 21:44:50 2015 by ca65html
uz@cc65.org