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

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
Line 190: Line 190:
 
FCBSPACE EQU $
 
FCBSPACE EQU $
 
</pre>
 
</pre>
 +
 +
=Sum Numbers=
 +
To run Sum Numbers, type:<br/>
 +
RUN"PASCAL5"
 +
<gallery widths="384px" heights="270px" perrow="2">
 +
image:pascal5_1.png
 +
image:pascal5_2.png
 +
</gallery>
  
 
IN PROGRESS<br/>
 
IN PROGRESS<br/>

Revision as of 00:17, 27 April 2009

Return to ACU Type-Ins

Downloads

Disk Image

Cover Image

Acu march 1985 cover.png

Jeremy Vine's music routine

To run Jeremy Vine's music routine, type:
RUN"MUSIC"

Number Sort routine

To run Number Sort routine, type:
RUN"SORT"

Prime Numbers (1)

To run Prime Numbers (1), type:
RUN"PASCAL3"

Prime Numbers (2)

To run Prime Numbers (2), type:
RUN"PASCAL4"

Unerase

The Z80 assembler code for David Link's Unerase program.

						; 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	$

Sum Numbers

To run Sum Numbers, type:
RUN"PASCAL5"

IN PROGRESS

IN PROGRESS

IN PROGRESS

IN PROGRESS

IN PROGRESS

IN PROGRESS

IN PROGRESS

IN PROGRESS

IN PROGRESS

IN PROGRESS

Electric Eddy

To run Electric Eddy, type:
RUN"EDDY"

Electric Fencing

To run Electric Fencing, type:
RUN"FENCING"

Flashman

To run Flashman, type:
RUN"FLASHMAN"

Machine code fill routine and demonstration

To run Machine code fill routine and demonstration, type:
RUN"MCFILL"

Trench

To run Trench, type:
RUN"TRENCH"