Skip to content

Commit a7a26e4

Browse files
authored
Merge pull request #265 from boriel/bugfix/SAVE_err
Bugfix/save err
2 parents c6878b7 + 2bcfc31 commit a7a26e4

File tree

5 files changed

+142
-31
lines changed

5 files changed

+142
-31
lines changed

library-asm/save.asm

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,16 @@ SAVE_CONT:
8181
ldir ; Copy String block NAME
8282
ld l, (ix + 13)
8383
ld h, (ix + 14) ; Restores start of bytes
84-
84+
85+
ld a, r
86+
push af
8587
call ROM_SAVE
88+
89+
LOCAL NO_INT
90+
pop af
91+
jp po, NO_INT
92+
ei
93+
NO_INT:
8694
; Recovers ECHO_E since ROM SAVE changes it
8795
ld hl, 1821h
8896
ld (23682), hl
@@ -98,14 +106,15 @@ SAVE_STOP:
98106
LOCAL PO_MSG
99107
LOCAL WAIT_KEY
100108
LOCAL SA_BYTES
109+
LOCAL SA_CHK_BRK
110+
LOCAL SA_CONT
101111

102112
CHAN_OPEN EQU 1601h
103113
PO_MSG EQU 0C0Ah
104114
WAIT_KEY EQU 15D4h
105115
SA_BYTES EQU 04C6h
106116

107117
ROM_SAVE:
108-
109118
push hl
110119
ld a, 0FDh
111120
call CHAN_OPEN
@@ -116,12 +125,17 @@ ROM_SAVE:
116125
call WAIT_KEY
117126
push ix
118127
ld de, 0011h
119-
ld a, r
120-
push af
121128
xor a
122129
call SA_BYTES
130+
pop ix
123131

132+
call SA_CHK_BRK
133+
jr c, SA_CONT
124134
pop ix
135+
ret
136+
137+
SA_CONT:
138+
ei
125139
ld b, 32h
126140

127141
LOCAL SA_1_SEC
@@ -135,9 +149,18 @@ SA_1_SEC:
135149
pop ix
136150
call SA_BYTES
137151

138-
pop af
139-
ret po
140-
ei
152+
SA_CHK_BRK:
153+
ld b, a
154+
ld a, (5C48h)
155+
and 38h
156+
rrca
157+
rrca
158+
rrca
159+
out (0FEh), a
160+
ld a, 7Fh
161+
in a, (0FEh)
162+
rra
163+
ld a, b
141164
ret
142165

143166
#endif

tests/functional/save.asm

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,14 @@ SAVE_CONT:
439439
ldir ; Copy String block NAME
440440
ld l, (ix + 13)
441441
ld h, (ix + 14) ; Restores start of bytes
442+
ld a, r
443+
push af
442444
call ROM_SAVE
445+
LOCAL NO_INT
446+
pop af
447+
jp po, NO_INT
448+
ei
449+
NO_INT:
443450
; Recovers ECHO_E since ROM SAVE changes it
444451
ld hl, 1821h
445452
ld (23682), hl
@@ -452,6 +459,8 @@ SAVE_STOP:
452459
LOCAL PO_MSG
453460
LOCAL WAIT_KEY
454461
LOCAL SA_BYTES
462+
LOCAL SA_CHK_BRK
463+
LOCAL SA_CONT
455464
CHAN_OPEN EQU 1601h
456465
PO_MSG EQU 0C0Ah
457466
WAIT_KEY EQU 15D4h
@@ -467,11 +476,15 @@ ROM_SAVE:
467476
call WAIT_KEY
468477
push ix
469478
ld de, 0011h
470-
ld a, r
471-
push af
472479
xor a
473480
call SA_BYTES
474481
pop ix
482+
call SA_CHK_BRK
483+
jr c, SA_CONT
484+
pop ix
485+
ret
486+
SA_CONT:
487+
ei
475488
ld b, 32h
476489
LOCAL SA_1_SEC
477490
SA_1_SEC:
@@ -482,11 +495,20 @@ SA_1_SEC:
482495
ld a, 0FFh
483496
pop ix
484497
call SA_BYTES
485-
pop af
486-
ret po
487-
ei
498+
SA_CHK_BRK:
499+
ld b, a
500+
ld a, (5C48h)
501+
and 38h
502+
rrca
503+
rrca
504+
rrca
505+
out (0FEh), a
506+
ld a, 7Fh
507+
in a, (0FEh)
508+
rra
509+
ld a, b
488510
ret
489-
#line 144 "/zxbasic/library-asm/save.asm"
511+
#line 167 "/zxbasic/library-asm/save.asm"
490512
ENDP
491513
#line 33 "save.bas"
492514
ZXBASIC_USER_DATA:

tests/functional/save01.asm

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,14 @@ SAVE_CONT:
443443
ldir ; Copy String block NAME
444444
ld l, (ix + 13)
445445
ld h, (ix + 14) ; Restores start of bytes
446+
ld a, r
447+
push af
446448
call ROM_SAVE
449+
LOCAL NO_INT
450+
pop af
451+
jp po, NO_INT
452+
ei
453+
NO_INT:
447454
; Recovers ECHO_E since ROM SAVE changes it
448455
ld hl, 1821h
449456
ld (23682), hl
@@ -456,6 +463,8 @@ SAVE_STOP:
456463
LOCAL PO_MSG
457464
LOCAL WAIT_KEY
458465
LOCAL SA_BYTES
466+
LOCAL SA_CHK_BRK
467+
LOCAL SA_CONT
459468
CHAN_OPEN EQU 1601h
460469
PO_MSG EQU 0C0Ah
461470
WAIT_KEY EQU 15D4h
@@ -471,11 +480,15 @@ ROM_SAVE:
471480
call WAIT_KEY
472481
push ix
473482
ld de, 0011h
474-
ld a, r
475-
push af
476483
xor a
477484
call SA_BYTES
478485
pop ix
486+
call SA_CHK_BRK
487+
jr c, SA_CONT
488+
pop ix
489+
ret
490+
SA_CONT:
491+
ei
479492
ld b, 32h
480493
LOCAL SA_1_SEC
481494
SA_1_SEC:
@@ -486,11 +499,20 @@ SA_1_SEC:
486499
ld a, 0FFh
487500
pop ix
488501
call SA_BYTES
489-
pop af
490-
ret po
491-
ei
502+
SA_CHK_BRK:
503+
ld b, a
504+
ld a, (5C48h)
505+
and 38h
506+
rrca
507+
rrca
508+
rrca
509+
out (0FEh), a
510+
ld a, 7Fh
511+
in a, (0FEh)
512+
rra
513+
ld a, b
492514
ret
493-
#line 144 "/zxbasic/library-asm/save.asm"
515+
#line 167 "/zxbasic/library-asm/save.asm"
494516
ENDP
495517
#line 37 "save01.bas"
496518
ZXBASIC_USER_DATA:

tests/functional/save02.asm

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,14 @@ SAVE_CONT:
440440
ldir ; Copy String block NAME
441441
ld l, (ix + 13)
442442
ld h, (ix + 14) ; Restores start of bytes
443+
ld a, r
444+
push af
443445
call ROM_SAVE
446+
LOCAL NO_INT
447+
pop af
448+
jp po, NO_INT
449+
ei
450+
NO_INT:
444451
; Recovers ECHO_E since ROM SAVE changes it
445452
ld hl, 1821h
446453
ld (23682), hl
@@ -453,6 +460,8 @@ SAVE_STOP:
453460
LOCAL PO_MSG
454461
LOCAL WAIT_KEY
455462
LOCAL SA_BYTES
463+
LOCAL SA_CHK_BRK
464+
LOCAL SA_CONT
456465
CHAN_OPEN EQU 1601h
457466
PO_MSG EQU 0C0Ah
458467
WAIT_KEY EQU 15D4h
@@ -468,11 +477,15 @@ ROM_SAVE:
468477
call WAIT_KEY
469478
push ix
470479
ld de, 0011h
471-
ld a, r
472-
push af
473480
xor a
474481
call SA_BYTES
475482
pop ix
483+
call SA_CHK_BRK
484+
jr c, SA_CONT
485+
pop ix
486+
ret
487+
SA_CONT:
488+
ei
476489
ld b, 32h
477490
LOCAL SA_1_SEC
478491
SA_1_SEC:
@@ -483,11 +496,20 @@ SA_1_SEC:
483496
ld a, 0FFh
484497
pop ix
485498
call SA_BYTES
486-
pop af
487-
ret po
488-
ei
499+
SA_CHK_BRK:
500+
ld b, a
501+
ld a, (5C48h)
502+
and 38h
503+
rrca
504+
rrca
505+
rrca
506+
out (0FEh), a
507+
ld a, 7Fh
508+
in a, (0FEh)
509+
rra
510+
ld a, b
489511
ret
490-
#line 144 "/zxbasic/library-asm/save.asm"
512+
#line 167 "/zxbasic/library-asm/save.asm"
491513
ENDP
492514
#line 34 "save02.bas"
493515
ZXBASIC_USER_DATA:

tests/functional/save03.asm

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,14 @@ SAVE_CONT:
439439
ldir ; Copy String block NAME
440440
ld l, (ix + 13)
441441
ld h, (ix + 14) ; Restores start of bytes
442+
ld a, r
443+
push af
442444
call ROM_SAVE
445+
LOCAL NO_INT
446+
pop af
447+
jp po, NO_INT
448+
ei
449+
NO_INT:
443450
; Recovers ECHO_E since ROM SAVE changes it
444451
ld hl, 1821h
445452
ld (23682), hl
@@ -452,6 +459,8 @@ SAVE_STOP:
452459
LOCAL PO_MSG
453460
LOCAL WAIT_KEY
454461
LOCAL SA_BYTES
462+
LOCAL SA_CHK_BRK
463+
LOCAL SA_CONT
455464
CHAN_OPEN EQU 1601h
456465
PO_MSG EQU 0C0Ah
457466
WAIT_KEY EQU 15D4h
@@ -467,11 +476,15 @@ ROM_SAVE:
467476
call WAIT_KEY
468477
push ix
469478
ld de, 0011h
470-
ld a, r
471-
push af
472479
xor a
473480
call SA_BYTES
474481
pop ix
482+
call SA_CHK_BRK
483+
jr c, SA_CONT
484+
pop ix
485+
ret
486+
SA_CONT:
487+
ei
475488
ld b, 32h
476489
LOCAL SA_1_SEC
477490
SA_1_SEC:
@@ -482,11 +495,20 @@ SA_1_SEC:
482495
ld a, 0FFh
483496
pop ix
484497
call SA_BYTES
485-
pop af
486-
ret po
487-
ei
498+
SA_CHK_BRK:
499+
ld b, a
500+
ld a, (5C48h)
501+
and 38h
502+
rrca
503+
rrca
504+
rrca
505+
out (0FEh), a
506+
ld a, 7Fh
507+
in a, (0FEh)
508+
rra
509+
ld a, b
488510
ret
489-
#line 144 "/zxbasic/library-asm/save.asm"
511+
#line 167 "/zxbasic/library-asm/save.asm"
490512
ENDP
491513
#line 33 "save03.bas"
492514
ZXBASIC_USER_DATA:

0 commit comments

Comments
 (0)