mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
523 lines
8.1 KiB
523 lines
8.1 KiB
; metadata.asm 7/30/2012 dwg - set c=0 for BIOS WRITE calls per Wayne
|
|
; metadata.asm 2/17/2012 dwg - review for release 1.5.1.0
|
|
; metadata.asm 2/11/2012 dwg - review for release 1.5
|
|
; metadata.asm 2/ 4/2012 dwg - metadata library implementation
|
|
|
|
; Copyright (C) 2011-2012 Douglas Goodall Licensed under GPL Ver 3.
|
|
;
|
|
; This file is part of NuBiosDWG and is free software: you can
|
|
; redistribute it and/or modify it under the terms of the GNU
|
|
; General Public License as published by the Free Software Foundation,
|
|
; either version 3 of the License, or (at your option) any later version.
|
|
; This file is distributed in the hope that it will be useful,
|
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
; GNU General Public License for more details.
|
|
; You should have received a copy of the GNU General Public License
|
|
; along with it. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
maclib portab
|
|
maclib globals
|
|
maclib cpmbios
|
|
maclib cpmbdos
|
|
maclib memory ; has x$memset
|
|
maclib applvers ; has A$RMJ, A$RMN, A$RUP, A$RTP
|
|
maclib printers
|
|
maclib stdlib ; SUCCESS and FAILURE
|
|
|
|
; metadata.lib 1/31/2012 dwg - macros to manipulate drive metadata
|
|
;
|
|
; update$meta buffer | x$u$meta hl -> buffer
|
|
; init$meta buffer | x$i$meta hl -> buffer
|
|
; get$meta drive,buffer | x$g$meta hl -> buffer, c = drivenum
|
|
; put$meta drive,buffer | x$p$meta hl -> buffer, c = drivenum
|
|
; prot$meta drive | x$pr$meta c = drivenum
|
|
; unprot$meta drive | x$un$meta c = drivenum
|
|
;
|
|
;-------------------------------------------
|
|
|
|
;meta$debug equ TRUE
|
|
meta$debug equ FALSE
|
|
|
|
meta$sig5a equ 0
|
|
meta$siga5 equ 1
|
|
meta$prot equ 128-8-1-16-7
|
|
meta$updates equ 128-8-1-16-6
|
|
meta$rmj equ 128-8-1-16-4
|
|
meta$rmn equ 128-8-1-16-3
|
|
meta$rup equ 128-8-1-16-2
|
|
meta$rtp equ 128-8-1-16-1
|
|
meta$label equ 128-8-1-16
|
|
meta$term equ 128-8-1
|
|
meta$info$loc equ 128-8
|
|
meta$cpm$loc equ 128-6
|
|
meta$dat$end equ 128-4
|
|
meta$cpm$ent equ 128-2
|
|
meta$label$len equ meta$term-meta$label
|
|
|
|
;-----------------------------
|
|
crlf db CR,LF,'$'
|
|
;-----------------------------
|
|
|
|
page
|
|
|
|
public x$u$meta
|
|
x$u$meta:
|
|
shld x$u$bufptr
|
|
|
|
; lhld x$u$bufptr
|
|
lxi d,meta$prot
|
|
dad d
|
|
mov a,m
|
|
cpi TRUE ; is metadata write protected
|
|
jz x$u$proterr ; if so go around update code
|
|
|
|
; increment the update count
|
|
lhld x$u$bufptr
|
|
lxi d,meta$updates
|
|
dad d
|
|
mov e,m ; pick up LO byte into E
|
|
inx h
|
|
mov d,m ; pick up HO byte into D
|
|
inx d ; increment DE
|
|
mov m,d
|
|
dcx h
|
|
mov m,e
|
|
|
|
; update last written version quad
|
|
lhld x$u$bufptr
|
|
lxi d,meta$rmj
|
|
dad d
|
|
mvi a,A$RMJ
|
|
mov m,a
|
|
inx h
|
|
mvi a,A$RMN
|
|
mov m,a
|
|
inx h
|
|
mvi a,A$RUP
|
|
mov m,a
|
|
inx h
|
|
mvi a,A$RTP
|
|
mov m,a
|
|
|
|
lhld x$u$bufptr
|
|
lxi d,meta$term
|
|
dad d
|
|
mov a,m
|
|
cpi '$'
|
|
jz x$u$end
|
|
|
|
lhld x$u$bufptr
|
|
lxi d,meta$label
|
|
dad d
|
|
mvi a,' '
|
|
mvi c,16
|
|
call x$memset
|
|
|
|
lhld x$u$bufptr
|
|
lxi d,meta$term
|
|
dad d
|
|
mvi a,'$'
|
|
mov m,a
|
|
|
|
x$u$end:
|
|
mvi a,SUCCESS
|
|
ret
|
|
|
|
x$u$proterr:
|
|
mvi a,FAILURE
|
|
ret
|
|
|
|
x$u$bufptr ds 2
|
|
|
|
|
|
;-----------------------------
|
|
|
|
page
|
|
|
|
public x$i$meta
|
|
x$i$meta:
|
|
shld x$i$bufptr
|
|
|
|
lhld x$i$bufptr
|
|
lxi d,meta$sig5a
|
|
dad d
|
|
mvi a,05ah
|
|
mov m,a
|
|
inx h
|
|
mvi a,0a5h
|
|
mov m,a
|
|
|
|
lhld x$i$bufptr
|
|
lxi d,meta$prot
|
|
dad d
|
|
mvi a,FALSE
|
|
mov m,a
|
|
|
|
lhld x$i$bufptr
|
|
lxi d,meta$updates
|
|
dad d
|
|
mvi a,0
|
|
mov m,a
|
|
inx h
|
|
mov m,a
|
|
|
|
lhld x$i$bufptr
|
|
lxi d,meta$label
|
|
dad d ; hl -> dest
|
|
mvi a,' '
|
|
mvi c,meta$label$len
|
|
call x$memset
|
|
|
|
lhld x$i$bufptr
|
|
lxi d,meta$term
|
|
dad d
|
|
mvi a,'$'
|
|
mov m,a
|
|
|
|
lhld x$i$bufptr
|
|
lxi d,meta$updates
|
|
dad d
|
|
mvi a,0
|
|
mov m,a
|
|
inx h
|
|
mov m,a
|
|
|
|
lhld x$i$bufptr
|
|
call x$u$meta
|
|
|
|
ret
|
|
|
|
x$i$bufptr ds 2
|
|
|
|
;-------------------------------------------
|
|
|
|
page
|
|
|
|
public x$g$meta
|
|
x$g$meta;
|
|
|
|
shld x$g$bufptr ; entry hl has bufptr
|
|
mov a,c ; entry c has drivenum
|
|
sta x$g$drivenum
|
|
|
|
; lda x$g$drivenum
|
|
mov c,a
|
|
call BISELDSK
|
|
|
|
lxi b,0
|
|
call BISETTRK
|
|
|
|
lxi b,11
|
|
call BISETSEC
|
|
|
|
lhld x$g$bufptr
|
|
push h
|
|
pop b
|
|
call BISETDMA
|
|
|
|
call BIREAD
|
|
|
|
lhld x$g$bufptr
|
|
lxi d,meta$siga5
|
|
dad d
|
|
mov a,m
|
|
cpi 0a5h
|
|
jnz x$g$needs$init
|
|
|
|
lhld x$g$bufptr
|
|
lxi d,meta$sig5a
|
|
dad d
|
|
mov a,m
|
|
cpi 05ah
|
|
jnz x$g$needs$init
|
|
|
|
jmp x$g$fini
|
|
|
|
x$g$needs$init:
|
|
|
|
lhld x$g$bufptr
|
|
call x$i$meta
|
|
|
|
mvi c,0 ; default to 0 per Wayne
|
|
call BIWRITE
|
|
|
|
x$g$fini:
|
|
mvi c,13
|
|
call BDOS
|
|
ret
|
|
|
|
x$g$bufptr ds 2
|
|
x$g$drivenum ds 1
|
|
|
|
;-----------------------------------
|
|
|
|
page
|
|
|
|
public x$p$meta
|
|
x$p$meta:
|
|
shld x$p$bufptr
|
|
mov a,c
|
|
sta x$p$drivenum
|
|
|
|
IF meta$debug eq TRUE
|
|
conout 'x'
|
|
conout '$'
|
|
conout 'p'
|
|
conout '$'
|
|
printf 'meta called, drive='
|
|
lda x$p$drivenum
|
|
mov l,a
|
|
mvi h,0
|
|
call pr$d$word
|
|
printf ', buffer='
|
|
lhld x$p$bufptr
|
|
call pr$h$word
|
|
print crlf
|
|
ENDIF
|
|
|
|
; increment the update count
|
|
lhld x$p$bufptr ; hl -> buffer
|
|
lxi d,meta$updates ; de = offset to updates word
|
|
dad d ; hl -> updates word
|
|
mov e,m ; e = LO byte of updates
|
|
inx h ; hl -> HO byte
|
|
mov d,m ; d = HO byte of updates
|
|
inx d ; increment DE (updates)
|
|
mov m,d ; put back HO byte
|
|
dcx h ; back up ptr
|
|
mov m,e ; put back LO byte
|
|
|
|
; update last written version quad
|
|
lhld x$p$bufptr
|
|
lxi d,meta$rmj
|
|
dad d
|
|
mvi a,A$RMJ
|
|
mov m,a
|
|
inx h
|
|
mvi a,A$RMN
|
|
mov m,a
|
|
inx h
|
|
mov a,A$RUP
|
|
mov m,a
|
|
inx h
|
|
mvi a,A$RTP
|
|
mov m,a
|
|
|
|
lhld x$p$bufptr
|
|
lxi d,meta$prot
|
|
dad d
|
|
mov a,m
|
|
cpi TRUE ; if metadata is write protected
|
|
jz x$p$fini ; jump around update code
|
|
lda x$p$drivenum
|
|
mov c,a
|
|
call BISELDSK
|
|
lxi b,0
|
|
call BISETTRK
|
|
lxi b,11
|
|
call BISETSEC
|
|
lhld x$p$bufptr
|
|
push h
|
|
pop b
|
|
call BISETDMA
|
|
|
|
mvi c,0 ; default to 0 per Wayne
|
|
call BIWRITE
|
|
|
|
IF meta$debug eq TRUE
|
|
printf 'return from BIWRITE is '
|
|
mov l,a
|
|
mvi h,0
|
|
call pr$h$word
|
|
print crlf
|
|
ENDIF
|
|
|
|
x$p$fini:
|
|
ret
|
|
|
|
x$p$bufptr ds 2
|
|
x$p$drivenum ds 1
|
|
|
|
;-----------------------
|
|
|
|
page
|
|
|
|
public x$pr$meta
|
|
x$pr$meta:
|
|
mov a,c
|
|
sta x$pr$drivenum
|
|
|
|
IF meta$debug eq TRUE
|
|
conout 'x'
|
|
conout '$'
|
|
printf 'pr'
|
|
conout '$'
|
|
printf 'meta called, drive='
|
|
lda x$pr$drivenum
|
|
mov l,a
|
|
mvi h,0
|
|
call pr$d$word
|
|
print crlf
|
|
ENDIF
|
|
|
|
lda x$pr$drivenum
|
|
mov c,a
|
|
call BISELDSK
|
|
lxi b,0
|
|
call BISETTRK
|
|
lxi b,11
|
|
call BISETSEC
|
|
lxi b,x$pr$buffer
|
|
call BISETDMA
|
|
call BIREAD
|
|
|
|
IF meta$debug eq TRUE
|
|
printf 'return from BIREAD is '
|
|
mov l,a
|
|
mvi h,0
|
|
call pr$h$word
|
|
print crlf
|
|
ENDIF
|
|
|
|
lxi h,x$pr$buffer
|
|
lxi d,meta$prot
|
|
dad d
|
|
mvi a,TRUE
|
|
mov m,a
|
|
|
|
|
|
lxi h,x$pr$buffer
|
|
lxi d,meta$updates
|
|
dad d
|
|
mov e,m
|
|
inx h
|
|
mov d,m
|
|
inx d
|
|
mov m,d
|
|
dcx h
|
|
mov m,e
|
|
|
|
lda x$pr$drivenum
|
|
mov c,a
|
|
call BISELDSK
|
|
lxi b,0
|
|
call BISETTRK
|
|
lxi b,11
|
|
call BISETSEC
|
|
lxi b,x$pr$buffer
|
|
call BISETDMA
|
|
|
|
mvi c,0 ; default to 0 per Wayne
|
|
call BIWRITE
|
|
|
|
IF meta$debug eq TRUE
|
|
printf 'return from BIWRITE is '
|
|
mov l,a
|
|
mvi h,0
|
|
call pr$h$word
|
|
print crlf
|
|
ENDIF
|
|
|
|
mvi c,13
|
|
call BDOS
|
|
|
|
ret
|
|
|
|
|
|
x$pr$drivenum ds 1
|
|
x$pr$buffer ds 128
|
|
|
|
;-----------------------
|
|
|
|
page
|
|
|
|
public x$un$meta
|
|
x$un$meta:
|
|
mov a,c
|
|
sta x$un$drivenum
|
|
|
|
IF meta$debug eq TRUE
|
|
conout 'x'
|
|
conout '$'
|
|
printf 'un'
|
|
conout '$'
|
|
printf 'meta called, drive='
|
|
lda x$un$drivenum
|
|
mov l,a
|
|
mvi h,0
|
|
call pr$d$word
|
|
print crlf
|
|
ENDIF
|
|
|
|
lda x$un$drivenum
|
|
mov c,a
|
|
call BISELDSK
|
|
lxi b,0
|
|
call BISETTRK
|
|
lxi b,11
|
|
call BISETSEC
|
|
lxi b,x$un$buffer
|
|
call BISETDMA
|
|
call BIREAD
|
|
|
|
IF meta$debug eq TRUE
|
|
printf 'return from BIREAD is '
|
|
mov l,a
|
|
mvi h,0
|
|
call pr$h$word
|
|
print crlf
|
|
ENDIF
|
|
|
|
lxi h,x$un$buffer
|
|
lxi d,meta$prot
|
|
dad d
|
|
mvi a,FALSE
|
|
mov m,a
|
|
|
|
|
|
lxi h,x$un$buffer
|
|
lxi d,meta$updates
|
|
dad d
|
|
mov e,m
|
|
inx h
|
|
mov d,m
|
|
inx d
|
|
mov m,d
|
|
dcx h
|
|
mov m,e
|
|
|
|
lda x$un$drivenum
|
|
mov c,a
|
|
call BISELDSK
|
|
lxi b,0
|
|
call BISETTRK
|
|
lxi b,11
|
|
call BISETSEC
|
|
lxi b,x$un$buffer
|
|
call BISETDMA
|
|
|
|
mvi c,0 ; default to 0 per Wayne
|
|
call BIWRITE
|
|
|
|
IF meta$debug eq TRUE
|
|
printf 'return from BIWRITE is '
|
|
mov l,a
|
|
mvi h,0
|
|
call pr$h$word
|
|
print crlf
|
|
ENDIF
|
|
|
|
mvi c,13
|
|
call BDOS
|
|
|
|
ret
|
|
|
|
x$un$drivenum ds 1
|
|
x$un$buffer ds 128
|
|
|
|
;-----------------------
|
|
|
|
; eof - metadata.asm
|
|
|