@@ -178,6 +178,7 @@ _Open:
178
178
; Slot number if no error
179
179
ld a , appVarObj
180
180
_: ld (varTypeOpen) , a \.r
181
+ ld (op1) , a
181
182
push ix
182
183
ld ix , 0
183
184
add ix , sp
@@ -211,17 +212,18 @@ _: ld (varTypeOpen),a \.r
211
212
_: ld (currSlot) , a
212
213
ld hl , (ix + 6 )
213
214
ld de , op1 + 1
214
- ld bc , 9
215
+ ld bc , 8
215
216
ldir
216
217
xor a , a
217
218
ld (de) , a
218
219
ld hl , (ix + 9 )
219
220
ld a , (hl)
220
221
cp a , 'w'
222
+ ld iy , flags
221
223
jr nz , nooverwite
222
224
call _PushOP1
223
225
call _ChkFindSym
224
- call nc , _delvararc
226
+ call nc , _DelVarArc
225
227
call _PopOP1
226
228
nooverwite:
227
229
ld hl , (ix + 9 )
@@ -241,8 +243,6 @@ archivevar:
241
243
call _ChkFindSym
242
244
call _ChkInRam
243
245
jr z ,+ _
244
- inc de
245
- inc de
246
246
or a , a
247
247
sbc hl , hl
248
248
ex de , hl
@@ -251,8 +251,10 @@ archivevar:
251
251
ld d , (hl)
252
252
ex de , hl
253
253
call _EnoughMem
254
- jp c , _ReturnNULL_PopIX \.r
254
+ push af
255
255
call _PopOP1
256
+ pop af
257
+ jp c , _ReturnNULL_PopIX \.r
256
258
call _PushOP1
257
259
call _Arc_Unarc
258
260
call _PopOP1
@@ -277,9 +279,8 @@ _: call _ChkFindSym
277
279
ld de , 0
278
280
ld e , a
279
281
add hl , de
280
- ex ( sp ) , hl
281
- add hl , de
282
- pop de
282
+ ex de , hl
283
+ pop hl
283
284
jr _SavePtrs_ASM
284
285
_: ld hl , (ix + 9 )
285
286
ld a , (hl)
@@ -289,6 +290,7 @@ _: ld hl,(ix+9)
289
290
sbc hl , hl
290
291
varTypeOpen =$ + 1
291
292
ld a , 0
293
+ ld iy , flags
292
294
call _CreateVar
293
295
_SavePtrs_ASM:
294
296
push hl
@@ -309,7 +311,7 @@ _SavePtrs_ASM:
309
311
ld a , (currSlot)
310
312
ld l , a
311
313
ret
312
-
314
+
313
315
;-------------------------------------------------------------------------------
314
316
_SetArchiveStatus:
315
317
; Sets the archive status of a slot
@@ -318,8 +320,6 @@ _SetArchiveStatus:
318
320
; arg1 : Slot number
319
321
; Returns:
320
322
; None
321
- ld a , appVarObj
322
- ld (varTypeOpenArc) , a \.r
323
323
pop hl
324
324
pop de
325
325
pop bc
@@ -332,10 +332,12 @@ _SetArchiveStatus:
332
332
push af
333
333
call _GetSlotVATPtr_ASM \.r
334
334
ld hl , (hl)
335
+ ld a , (hl)
336
+ ld (OP1) , a
335
337
ld bc ,- 6
336
338
add hl , bc
337
339
ld b , (hl)
338
- ld de , op1 + 1
340
+ ld de , OP1 + 1
339
341
dec hl
340
342
_: ld a , (hl)
341
343
ld (de) , a
@@ -344,28 +346,34 @@ _: ld a,(hl)
344
346
djnz - _
345
347
xor a , a
346
348
ld (de) , a
347
- varTypeOpenArc =$ + 1
348
- ld a , 0
349
- ld (OP1) , a
349
+ call _PushOP1
350
+ ld iy , flags
350
351
call _ChkFindSym
351
352
call _ChkInRam
352
353
push af
353
- ld bc , 0
354
- call _GetSlotVATPtr_ASM \.r
355
- ld (hl) , bc
356
354
pop bc
357
355
pop af
358
356
or a , a
359
357
jr z , SetNotArchived
360
358
SetArchived:
361
359
push bc
362
360
pop af
363
- jp z , _Arc_Unarc
364
- ret
361
+ call z , _Arc_Unarc
362
+ jr RelocateVar
365
363
SetNotArchived:
366
364
push bc
367
365
pop af
368
- jp nz , _Arc_Unarc
366
+ call nz , _Arc_Unarc
367
+ RelocateVar:
368
+ call _PopOP1
369
+ call _ChkFindSym
370
+ jp c , _ReturnNEG1L \.r
371
+ push hl
372
+ call _GetSlotVATPtr_ASM \.r
373
+ pop bc
374
+ ld (hl) , bc
375
+ call _GetSlotDataPtr_ASM \.r
376
+ ld (hl) , de
369
377
ret
370
378
371
379
;-------------------------------------------------------------------------------
@@ -382,34 +390,62 @@ _Write:
382
390
add iy , sp
383
391
ld c , (iy + 12 )
384
392
call _CheckIfSlotOpen \.r
385
- jp z , _ReturnNULL \.r
393
+ jr z , _ReturnNULL_Close
394
+ call _CheckInRAM_ASM \.r
395
+ jr z , _ReturnNULL_Close
386
396
ld bc , (iy + 6 )
387
397
ld hl , (iy + 9 )
388
- call __smulu ; hl*bc
398
+ call __smulu
399
+ ld (CopySize_SMC) , hl \.r
400
+ push hl
401
+ call _GetSlotOffset_ASM \.r
402
+ pop hl
403
+ add hl , bc
404
+ push hl
405
+ call _GetSlotSize_ASM \.r ; bc = size of file
406
+ pop hl ; hl = needed size
407
+ or a , a
408
+ inc bc
409
+ sbc hl , bc
410
+ jr c , NoCoreNeeded
411
+ inc hl
412
+ ld (resizeBytes) , hl
413
+ call AddMemoryToVar \.r
414
+ or a , a
415
+ jr z , _ReturnNULL_Close
416
+ NoCoreNeeded:
417
+ call _GetSlotCurrDataPtr_ASM \.r
389
418
ex de , hl
390
- call _CheckInRAM_ASM \.r
391
- jp c , _ReturnNULL_PopIX \.r
392
419
ld hl , (iy + 3 )
420
+ CopySize_SMC =$ + 1
393
421
ld bc , 0
394
- _: ld a , (hl)
395
- push hl
396
- push de
397
422
push bc
398
- ld (charIn) , a
399
- call _PutChar_ASM \.r
400
- rl h
401
- pop bc
402
- pop de
423
+ ldir
424
+ call _GetSlotOffset_ASM \.r
403
425
pop hl
404
- jr c , _s ; was there a write error?
426
+ add hl , bc
427
+ ex de , hl
428
+ call _GetSlotOffsetPtr_ASM \.r
429
+ ld (hl) , de
430
+ ld hl , (iy + 9 )
431
+ ret
432
+
433
+ _ReturnNULL_Close:
434
+ xor a , a
435
+ sbc hl , hl
436
+ ret
437
+
438
+ _GetSlotCurrDataPtr_ASM:
439
+ call _GetSlotDataPtr_ASM \.r
440
+ ld hl , (hl)
441
+ push hl
442
+ call _GetSlotOffset_ASM \.r
443
+ pop hl
444
+ add hl , bc
405
445
inc hl
406
- inc bc
407
- dec de
408
- ld a , e
409
- or a , d
410
- jr nz ,- _
411
- jr _s ; jump to copy computations
412
-
446
+ inc hl
447
+ ret
448
+
413
449
;-------------------------------------------------------------------------------
414
450
_Read:
415
451
; Performs an fread to an AppVar
@@ -424,36 +460,25 @@ _Read:
424
460
add iy , sp
425
461
ld c , (iy + 12 )
426
462
call _CheckIfSlotOpen \.r
427
- jp z , _ReturnNULL \.r
463
+ jr z , _ReturnNULL_Close
428
464
ld bc , (iy + 6 )
429
465
ld hl , (iy + 9 )
430
- call __smulu ; hl*bc
431
- ex de , hl
432
- ld hl , (iy + 3 )
433
- ld bc , 0
434
- _: push hl
435
- push de
436
- push bc
437
- call _GetChar_ASM \.r
438
- rl h
439
- pop bc
440
- pop de
441
- pop hl
442
- jr c , _s
443
- ld (hl) , a
444
- inc hl
445
- inc bc
446
- dec de
447
- ld a , e
448
- or a , d
449
- jr nz ,- _
450
- _s: ld de , (iy + 6 )
451
- ex.s de , hl
452
466
push hl
453
- ld l , c
454
- ld h , b
467
+ call __smulu
468
+ push hl
469
+ call _GetSlotCurrDataPtr_ASM \.r
470
+ ld de , (iy + 3 )
455
471
pop bc
456
- jp __sdivu
472
+ push bc
473
+ ldir
474
+ call _GetSlotOffset_ASM \.r
475
+ pop hl
476
+ add hl , bc
477
+ ex de , hl
478
+ call _GetSlotOffsetPtr_ASM \.r
479
+ ld (hl) , de
480
+ pop hl
481
+ ret
457
482
458
483
;-------------------------------------------------------------------------------
459
484
_GetChar:
@@ -578,6 +603,8 @@ Increment:
578
603
ex de , hl
579
604
call AddMemoryToVar \.r
580
605
pop bc
606
+ or a , a
607
+ jp z , _ReturnNEG1L \.r
581
608
noIncrement:
582
609
call _GetSlotDataPtr_ASM \.r
583
610
ld hl , (hl)
@@ -631,6 +658,7 @@ _: pop de
631
658
ld (OP1) , a
632
659
call _ChkFindSym
633
660
jp c , _ReturnNULL \.r
661
+ ld iy , flags
634
662
call _DelVarArc
635
663
scf
636
664
sbc hl , hl
@@ -726,6 +754,12 @@ AddMemoryToVar:
726
754
inc hl
727
755
ex de , hl
728
756
ld hl , (resizeBytes)
757
+ push hl
758
+ push de
759
+ call _EnoughMem
760
+ pop de
761
+ pop hl
762
+ jr c , _ReturnNULLC
729
763
call _InsertMem
730
764
pop hl
731
765
ld hl , (hl)
@@ -767,8 +801,13 @@ SaveSize:
767
801
ld (hl) , e
768
802
inc hl
769
803
ld (hl) , d ; write new size
804
+ _ReturnNEG1C:
805
+ ld a , 255
770
806
ret
771
-
807
+ _ReturnNULLC:
808
+ xor a , a
809
+ ret
810
+
772
811
_ReturnNULL_PopIX:
773
812
pop ix
774
813
_ReturnNULL:
0 commit comments