Difference between revisions of "ACU March 1985 - Type-ins"

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
(Manipulating the Amstrad CPC464 Screen Display)
(Unerase)
Line 98: Line 98:
  
 
=Unerase=
 
=Unerase=
The Z80 assembler code for David Link's Unerase program.<br/>
+
=Manipulating the Amstrad CPC464 Screen Display=
 +
UNERASE.ASM contains the Z80 assembler code for David Link's Unerase program.<br/>
 
See Amstrad Computer User, March 1985, page 40 for more details.
 
See Amstrad Computer User, March 1985, page 40 for more details.
<pre>
 
; Unerase a file in CP/M - 04/11/84
 
; Copyright David Link 1984
 
 
; A program to unerase a file that has been accidentally
 
; erased. Should be used immediately after erasing the
 
; file since if user later, some blocks may have been re-used.
 
 
; Format is - UNERA filename
 
 
DEFCB EQU &5C
 
 
fnamelen EQU 8
 
extlen EQU 3
 
extent EQU 12
 
dirlen EQU 32
 
 
; CP/M BDOS call numbers
 
 
OPEN EQU 15
 
CLOSE EQU 16
 
SEARCH EQU 17
 
SRCH_AGAIN EQU 18
 
MAKE EQU 22
 
SETDMA EQU 26
 
 
; Default workspace for file reads
 
 
tbuff EQU 128
 
 
; Macro to call CP/M setting DE and C
 
 
DOS MAC
 
LD DE,=0
 
LD C,=1
 
CALL Dos
 
ENDM
 
 
; Macro to call CP/M setting C.
 
 
SDOS MAC
 
LD C,=0
 
CALL Dos
 
ENDM
 
 
; COM files begin at &100
 
 
ORG &100
 
 
LD SP,(6) ; set stack to top of TPA
 
DOS DEFCB,SEARCH ; Does file exist?
 
INC A
 
JP NZ,0 ; File exists, return to CCP
 
LD HL,FCBSPACE ; Initialise pointer to current FCB
 
LD (FCBPTR),HL
 
DOS tbuff,SETDMA ; set disc I/O to tbuff
 
DOS DUMFCB,SEARCH ; and search for the first entry in directory
 
 
More_Search INC A
 
JR Z,End_of_Directory ; No more entries
 
 
; Compare found filename with the required filename
 
 
Continue DEC A ; adjust because we INCed it
 
ADD A,A ; multiply by dirlen to get postion
 
ADD A,A ; of entry in catalogue
 
ADD A,A
 
ADD A,A
 
ADD A,A
 
LD D,0
 
LD E,A
 
LD HL,tbuff ; point to found file
 
ADD HL,DE
 
 
Again PUSH HL ; and compare it with required filename
 
INC HL
 
LD B,fnamelen+extlen ; both name and type (8, name : 3, type)
 
LD DE,DEFCB+1 ; filename starts at FCB + 1
 
 
Match LD A,(DE)
 
LD C,(HL)
 
RES 7,C ; some CP/Ms set bits on filename
 
CP C ; so make sure top bit is reset for comparison
 
INC HL
 
INC DE
 
JR NZ,NoMatch ; not this one
 
DJNZ Match ; good so far... keep going
 
 
; Match found
 
 
POP HL ; filename match, but...
 
PUSH HL
 
LD A,(HL) ; ... is it erased?
 
CP &E5 ; e% in first byte of directory = erased
 
JR NZ,NoMatch ; not erased... so search some more
 
LD (HL),0 ; it was erased, so unerase it
 
LD DE,(FCBPTR) ; and store the FCB information in
 
LD BC,dirlen ; our temporary table
 
LDIR
 
LD (FCBPTR),DE ; updating our table pointer afterwards
 
 
; Search for another entry
 
 
NoMatch POP HL
 
DOS DUMFCB,SRCH_AGAIN ; search for next entry in directory
 
JR More_Search
 
 
; we have now exhausted the directory search and built
 
; up our table of directory entries for the required file
 
 
End_of_Dir LD DE,FCBSPACE ; start processing table of matched
 
; directory entries
 
MAIN_LOOP LD HL,(FCBPTR) ; have we reached end of table?
 
OR A
 
SBC HL,DE
 
JP Z,0 ; finished, so return
 
PUSH DE ; save table pointer
 
LD HL,extent ; address extent byte
 
ADD HL,DE
 
LD A,(HL) ; make an extent of new,
 
LD (DEFCB+extent),a ; unerased file...
 
DOS DEFCB,MAKE
 
POP DE ; recover pointer to FCB...
 
SDOS CLOSE ; and close it
 
LD HL,dirlen
 
ADD HL,DE ; have we reached end of table?
 
EX DE,HL
 
JR MAIN_LOOP
 
 
Dos PUSH HL
 
PUSH DE
 
PUSH BC
 
CALL 5
 
POP BC
 
POP DE
 
POP HL
 
RET
 
 
FCBPTR DEFS 2
 
 
DUMFCB DEFM "????????????"
 
DEFW 0,0
 
DEFS 16
 
DEFW 0,0
 
 
FCBSPACE EQU $
 
</pre>
 
  
 
[[Category:Type Ins]]
 
[[Category:Type Ins]]

Revision as of 10:50, 31 July 2009

Return to ACU Type-Ins

Downloads

Disk Image

Cover Image

Acu march 1985 cover.png

Boolean operations demonstration

RUN"BOOLEAN"
Acu Boolean1.png Acu Boolean2.png

Electric Eddy

RUN"EDDY"
Acu Eddy1.png Acu Eddy2.png Acu Eddy3.png Acu Eddy4.png Acu Eddy5.png Acu Eddy6.png Acu Eddy7.png Acu Eddy8.png

Electric Fencing

RUN"FENCING"
Acu Fencing1.png Acu Fencing2.png Acu Fencing3.png Acu Fencing4.png

Flashman

RUN"FLASHMAN"
Acu Flash1.png Acu Flash2.png Acu Flash3.png Acu Flash4.png Acu Flash5.png Acu Flash6.png

Jeremy Vine's music routine

RUN"MUSIC"
Acu Music1.png

Machine code fill routine and demonstration

RUN"MCFILL"
Acu Mcfill1.png Acu Mcfill2.png Acu Mcfill3.png Acu Mcfill4.png

Manipulating the Amstrad CPC464 Screen Display

SCREEN1.ASM, SCREEN2.ASM, SCREEN3.ASM, SCREEN4.ASM, SCREEN5.ASM contain the Z80 assembler code for the "Manipulating the Amstrad CPC464 Screen Display" article.
See Amstrad Computer User, March 1985, page 103 for more details.

Number Sort routine

RUN"SORT"
Acu Sort1.png Acu Sort2.png Acu Sort3.png Acu Sort4.png

Prime Numbers (1)

RUN"PASCAL3"
Acu Pascal3 1.png Acu Pascal3 2.png

Prime Numbers (2)

RUN"PASCAL4"
Acu Pascal4 1.png Acu Pascal4 2.png

Screen Dump (DMP1)

DMPDMP1.ASM contains the Z80 assembler code for the "Events & Screen Dumps" article.
DMPLIST2.BAS and DMPLIST4.BAS contain the related BASIC code.
See Amstrad Computer User, March 1985, page 90 for more details.

Screen Dump (Epson)

DMPEPSON.ASM contains the Z80 assembler code for the "Events & Screen Dumps" article.
DMPLIST2.BAS and DMPLIST4.BAS contain the related BASIC code.
See Amstrad Computer User, March 1985, page 90 for more details.

Sum Numbers

RUN"PASCAL5"
Acu Pascal5 1.png Acu Pascal5 2.png

Trench

RUN"TRENCH"
Acu Trench1.png Acu Trench2.png Acu Trench3.png Acu Trench4.png Acu Trench5.png Acu Trench6.png Acu Trench7.png

Unerase

Manipulating the Amstrad CPC464 Screen Display

UNERASE.ASM contains the Z80 assembler code for David Link's Unerase program.
See Amstrad Computer User, March 1985, page 40 for more details.