DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦cdbb00aa3⟧ TextFile

    Length: 6272 (0x1880)
    Types: TextFile
    Names: »BILLEDE.A86«

Derivation

└─⟦490a8e2df⟧ Bits:30003937 SW1501 RcComal-80 v3.0 (thykier)
    └─ ⟦this⟧ »BILLEDE.A86« 
└─⟦72a4952a6⟧ Bits:30004362 SW1501 RcComal-80 v3.0
    └─ ⟦this⟧ »BILLEDE.A86« 
└─⟦dcb507fe6⟧ Bits:30003936 SW1501 RcComal-80 v3.0 (ils)
    └─ ⟦this⟧ »BILLEDE.A86« 

TextFile


CSEG
VER		DW 	VERSNO		;
PACKTYPE	DW	ASSEMBLER	;
DOC		DW	0		;
INIT		DW	OFFSET FINITO	;
EXIT		DW	0		;



		DB	11,'HENTBILLEDE' ; PROC hentbillede(filnavn$);
		DB	PROC		;
		DW	0		; ingen dokumentation
		DW	OFFSET XHENT	;
		DB	1		;
		DB	7,'FILNAVN'	;
		DB	VALUE+STRING,0	;

		DB	10,'GEMBILLEDE' ; PROC gembillede(filnavn$);
		DB	PROC		;
		DW	0		; ingen dokumentation
		DW	OFFSET XGEM	;
		DB	1		;
		DB	7,'FILNAVN'	;
		DB	VALUE+STRING,0	;


		DB	0		; ikke flere procedurer og funktioner
		DW	OFFSET RESERVER	;
		DW	ASSEMBLER	;


INCLUDE	ASSEMBL.A86



	BDOS	EQU	224		;

	F_READ	EQU	20		;
	F_WRITE	EQU	21		;
	F_OPEN	EQU	15		;
	F_MAKE	EQU	22		;

	F_PARSE EQU	152		;
	F_DMASEG EQU	51		;
	F_DMAOFS EQU	26		;
	F_DMAGET EQU	52		;
	F_MULTI	EQU	44		;
	F_CLOSE	EQU	16		;

	Q_OPEN	EQU	135		;

	C_WRITE	EQU	9		;

	MULCNTRPIC EQU	70		; multicountread:=70;
	DMALENPIC EQU	MULCNTRPIC*128	; antallæste (dmalength) := 70*128;

	MULCNTRPAR EQU	128		; multicountread:=128;
	DMALENPAR  EQU	MULCNTRPAR*128	; antallæste (dmalength) := 128*128;

	NOOFR	EQU	2		;
	NOOFWPIC EQU	140		;
	NOOFWPAR EQU	256		;

	XIOS	EQU	28H		;
	GET_CONFIG EQU	4		;



XHENT:	MOV	MODE,F_READ		; mode:=readmode;
	MOV	OPEN,F_OPEN		; open:=openmode;
	MOV	MODEERROR,READERR	;
	MOV	NOOF,NOOFR		;
	JMPS	XSTART			;

XGEM:	MOV	MODE,F_WRITE		; mode:=writemode;
	MOV	OPEN,F_MAKE		; open:=makemode;
	MOV	MODEERROR,WRITEERR ;

XSTART:	
	MOV	CX,F_DMAGET		;
	INT	BDOS			; get_dma;
	MOV	DMAOFS,AX		;
	MOV	DMASEG,ES		;

	MOV	MULCNT,MULCNTRPAR	;
	MOV	DMALENGTH,DMALENPAR	;
	MOV	DX,OFFSET PARTNEREXT	;   extension:="PAR";
	PUSH	DX			;
	mov	pixel_segment,0F000H	;   pixel_segment:=0F000H;
	MOV	NOOFW,NOOFWPAR		;
	MOV	DX,OFFSET MXCASETTE	;
	MOV	CX,Q_OPEN		;
	INT	BDOS			;
	OR	AX,AX			; if cpu_id = PICCOLINE then
	JNZ	TSTWRI			;

	mov	pixel_segment,0D000H	; begin (* PICCOLINE *)
	mov	al,get_config		;   pixel_segment:=0D000H;
	int	xios			;   if video_hz_50 then
	test	ES:byte ptr 18ÆsiÅ,010B	;   BEGIN
	JNZ	TSTWRI			;
	MOV	MULCNT,MULCNTRPIC	;
	MOV	DMALENGTH,DMALENPIC	;
	MOV	NOOFW,NOOFWPIC		;
	POP	DX			;
	MOV	DX,OFFSET PICEXT	;     extension:="PIC";
	PUSH	DX			;   END;

TSTWRI:	CMP	MODE,F_WRITE		;
	JNE	MAKEFCB			;
	MOV	MULCNT,1		;
	MOV	DMALENGTH,128		;
	MOV	DX,NOOFW		;
	MOV	NOOF,DX			;

MAKEFCB:MOV	AX,DS			;
	MOV	ES,AX			;
	MOV	DI,OFFSET FNAME		;
	XOR	AL,AL			;
	MOV	CX,16			;
	REP	STOSB			; clear fname;
					;(* flyt parameter til
					;	   fname i pakkens 
					;	   data-segment *)

	MOV	CL,1
	MOV	DI,OFFSET FNAME		;
	CALL	STRPAR			;

	MOV	CX,4			;
	POP	SI			;
	REP	MOVSB			;  move_extension_to_filename;

	MOV	CX,F_PARSE		;
	MOV	DX,OFFSET PFCB		;
	INT	BDOS			; parse filename
	MOV	DX,PARSEERR		;
	CMP	AX,0FFFFH		;
	JNE	FCBOK			;
	JMP	PCKERROR		;

FCBOK:	MOV	BX,OFFSET FCB		;
	CMP	MODE,F_READ		;
	JNE	NOTREAD			; IF read_mode THEN
	OR	BYTE PTR 6ÆBXÅ,080H	;   read_only_mode;
NOTREAD:MOV	CX,OPEN			;
	MOV	DX,BX			;
	INT 	BDOS			; open/make file
	MOV	DX,OPENERR		;
	OR	AL,AL			;
	JNZ	PCKERROR		;
	MOV	BX,OFFSET FCB		;
	MOV	BYTE PTR 32ÆBXÅ,0	; read/write_from_beginning;

	CALL	LOCK_C			; lock_console;
	MOV	DX,LOCKERR		;
	OR	AL,AL			;
	JNZ	ERRORC			;

	MOV	CX,F_MULTI		;
	MOV	DL,MULCNT		;
	INT	BDOS			; set_multisec_counter
	MOV	DX,MULTIERR		;
	CMP	AL,0FFH			;
	JE	ERRORC			;

	MOV	CX,F_DMASEG		;
	MOV	DX,PIXEL_SEGMENT	;
	INT	BDOS			; set_dma_segm_to_pixel_segm

	XOR	AX,AX			;
	MOV	PIXEL_OFS,AX		; clear_pixel_offset

	MOV	CX,NOOF			;
X1:	PUSH	CX			; FOR I:=1 T0 noof DO
	
	MOV	CX,F_DMAOFS		; BEGIN
	MOV	DX,PIXEL_OFS		;
	INT 	BDOS			;   set_dma_ofs_to_pixel_offset

	MOV	CX,MODE			;
	MOV	DX,OFFSET FCB		;
	INT 	BDOS			;   read/write(128*multicount bytes 
					;		into/from pixel_mem)
	POP	CX			;
	DEC	CX			;
	JZ	CLOSEF			;
	MOV	DX,MODEERROR		;
	OR	AL,AL			;
	JNZ	ERRORC			;
	MOV	AX,PIXEL_OFS		;
	ADD	AX,DMALENGTH		;   pixel_offset:=pixel_offset+128*multicount
	MOV	PIXEL_OFS,AX		;
	JMPS	X1			; END

CLOSEF:	MOV	CX,F_CLOSE		;
	MOV	DX,OFFSET FCB		;
	INT	BDOS			; close file

	CALL	UNLOCK_C		; unlock_console

	JMPS	STOP			;


PCKERROR:
	MOV	AX,DX			;
	CALL	ERROR			;

	JMPS	STOP			;

ERRORC:	
	PUSH	DX			;
	MOV	CX,F_CLOSE		;
	MOV	DX,OFFSET FCB		;
	INT	BDOS			; close file

	POP	AX			;
	CALL	ERROR			;

	CALL	UNLOCK_C		; unlock_console

STOP:	MOV	CX,F_MULTI		;
	MOV	DL,1			;
	INT	BDOS			; set_multisec_counter

	MOV	CX,F_DMASEG		;
	MOV	DX,DMASEG		;
	INT	BDOS			; set_dma_segm_to_comal_dma_segm

	MOV	CX,F_DMAOFS		;
	MOV	DX,DMAOFS		;
	INT	BDOS			; set_dma_ofs_to_comal_dma_ofs

	JMP	FINITO



ccb_size	equ	02ch
ccb_state	equ	word ptr 0eh
sy_ccb		equ	054h
cf_noswitch	equ	00008h

lock_c:			; lock console
	push	bp	;
	push	si	;
	push	di	;

        call	osvalues
	call	getccbadr
	mov	bx,ccbadr
	push	ds
	mov	ds,sysdat
	cmp	ccb_stateÆbxÅ,0
	je	foreg	;
	pop	ds	;
	mov	ax,1	; error consol not in foregr
	jmp	lock_ret;
foreg:
	or	ccb_stateÆbxÅ,cf_noswitch
	pop	ds	;
	mov	ax,0	; ok result
lock_ret:
	pop	di	;
	pop	si	;
	pop	bp	;
	ret		;


unlock_c:		; unlock console
	push	bp	;
	push	si	;
	push	di	;

        call	osvalues
	call	getccbadr
	mov	bx,ccbadr
	push	ds
	mov	ds,sysdat
	and	ccb_stateÆbxÅ,not cf_noswitch
	pop	ds	;
	mov	ax,0	; ok result

	pop	di	;
	pop	si	;
	pop	bp	;
	ret		;

osvalues:
	push	es	;
	mov	cl,154	;
	int	224	; call bdos
	mov	sysdat,es
	pop	es	;
	ret		;

getccbadr:
	mov	cl,153	;
	int	224	;
	xor	ah,ah	;
	mov	cx,ccb_size
	mul	cx	;
	push	ds	;
	mov	ds,sysdat
	add	ax,.sy_ccb
	pop	ds	;
	mov	ccbadr,ax
	ret		;

sysdat	dw	0	;
ccbadr	dw	0	;


DSEG	$


FCB	RB	36

PFCB	DW	OFFSET FNAME
	DW	OFFSET FCB

FNAME	RB	16

PICEXT	DB	'.PIC'

PARTNEREXT DB	'.PAR'

PARSEERR	EQU	181

OPENERR		EQU	182

LOCKERR		EQU	183

MULTIERR	EQU	184

READERR		EQU	185

WRITEERR	EQU	186

MODE		DW	0

OPEN		DW	0

MULCNT		DB	0

DMALENGTH	DW	0

NOOF		DW	0

NOOFW		DW	0

MODEERROR	DW	READERR

DMASEG		DW	0

DMAOFS		DW	0

PIXEL_SEGMENT	DW	0D000H

PIXEL_OFS	DW	0

MXCASETTE	DW	0
		DW	0
		DW	0
		DW	0
		DB	'MXcass  '

END
«eof»