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.
529 lines
16 KiB
529 lines
16 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
|
|
0000 = meta$debug equ FALSE
|
|
|
|
0000 = meta$sig5a equ 0
|
|
0001 = meta$siga5 equ 1
|
|
0060 = meta$prot equ 128-8-1-16-7
|
|
0061 = meta$updates equ 128-8-1-16-6
|
|
0063 = meta$rmj equ 128-8-1-16-4
|
|
0064 = meta$rmn equ 128-8-1-16-3
|
|
0065 = meta$rup equ 128-8-1-16-2
|
|
0066 = meta$rtp equ 128-8-1-16-1
|
|
0067 = meta$label equ 128-8-1-16
|
|
0077 = meta$term equ 128-8-1
|
|
0078 = meta$info$loc equ 128-8
|
|
007A = meta$cpm$loc equ 128-6
|
|
007C = meta$dat$end equ 128-4
|
|
007E = meta$cpm$ent equ 128-2
|
|
0010 = meta$label$len equ meta$term-meta$label
|
|
|
|
;-----------------------------
|
|
0000 0D0A24 crlf db CR,LF,'$'
|
|
;-----------------------------
|
|
|
|
page
|
|
|
|
|
|
public x$u$meta
|
|
x$u$meta:
|
|
0003 225F00 shld x$u$bufptr
|
|
|
|
; lhld x$u$bufptr
|
|
0006 116000 lxi d,meta$prot
|
|
0009 19 dad d
|
|
000A 7E mov a,m
|
|
000B FE01 cpi TRUE ; is metadata write protected
|
|
000D CA5C00 jz x$u$proterr ; if so go around update code
|
|
|
|
; increment the update count
|
|
0010 2A5F00 lhld x$u$bufptr
|
|
0013 116100 lxi d,meta$updates
|
|
0016 19 dad d
|
|
0017 5E mov e,m ; pick up LO byte into E
|
|
0018 23 inx h
|
|
0019 56 mov d,m ; pick up HO byte into D
|
|
001A 13 inx d ; increment DE
|
|
001B 72 mov m,d
|
|
001C 2B dcx h
|
|
001D 73 mov m,e
|
|
|
|
; update last written version quad
|
|
001E 2A5F00 lhld x$u$bufptr
|
|
0021 116300 lxi d,meta$rmj
|
|
0024 19 dad d
|
|
0025 3E02 mvi a,A$RMJ
|
|
0027 77 mov m,a
|
|
0028 23 inx h
|
|
0029 3E05 mvi a,A$RMN
|
|
002B 77 mov m,a
|
|
002C 23 inx h
|
|
002D 3E00 mvi a,A$RUP
|
|
002F 77 mov m,a
|
|
0030 23 inx h
|
|
0031 3E01 mvi a,A$RTP
|
|
0033 77 mov m,a
|
|
|
|
0034 2A5F00 lhld x$u$bufptr
|
|
0037 117700 lxi d,meta$term
|
|
003A 19 dad d
|
|
003B 7E mov a,m
|
|
003C FE24 cpi '$'
|
|
003E CA5900 jz x$u$end
|
|
|
|
0041 2A5F00 lhld x$u$bufptr
|
|
0044 116700 lxi d,meta$label
|
|
0047 19 dad d
|
|
0048 3E20 mvi a,' '
|
|
004A 0E10 mvi c,16
|
|
004C CD0000 call x$memset
|
|
|
|
004F 2A5F00 lhld x$u$bufptr
|
|
0052 117700 lxi d,meta$term
|
|
0055 19 dad d
|
|
0056 3E24 mvi a,'$'
|
|
0058 77 mov m,a
|
|
|
|
x$u$end:
|
|
0059 3E00 mvi a,SUCCESS
|
|
005B C9 ret
|
|
|
|
x$u$proterr:
|
|
005C 3E01 mvi a,FAILURE
|
|
005E C9 ret
|
|
|
|
005F x$u$bufptr ds 2
|
|
|
|
|
|
;-----------------------------
|
|
|
|
page
|
|
|
|
|
|
public x$i$meta
|
|
x$i$meta:
|
|
0061 22B300 shld x$i$bufptr
|
|
|
|
0064 2AB300 lhld x$i$bufptr
|
|
0067 110000 lxi d,meta$sig5a
|
|
006A 19 dad d
|
|
006B 3E5A mvi a,05ah
|
|
006D 77 mov m,a
|
|
006E 23 inx h
|
|
006F 3EA5 mvi a,0a5h
|
|
0071 77 mov m,a
|
|
|
|
0072 2AB300 lhld x$i$bufptr
|
|
0075 116000 lxi d,meta$prot
|
|
0078 19 dad d
|
|
0079 3E00 mvi a,FALSE
|
|
007B 77 mov m,a
|
|
|
|
007C 2AB300 lhld x$i$bufptr
|
|
007F 116100 lxi d,meta$updates
|
|
0082 19 dad d
|
|
0083 3E00 mvi a,0
|
|
0085 77 mov m,a
|
|
0086 23 inx h
|
|
0087 77 mov m,a
|
|
|
|
0088 2AB300 lhld x$i$bufptr
|
|
008B 116700 lxi d,meta$label
|
|
008E 19 dad d ; hl -> dest
|
|
008F 3E20 mvi a,' '
|
|
0091 0E10 mvi c,meta$label$len
|
|
0093 CD0000 call x$memset
|
|
|
|
0096 2AB300 lhld x$i$bufptr
|
|
0099 117700 lxi d,meta$term
|
|
009C 19 dad d
|
|
009D 3E24 mvi a,'$'
|
|
009F 77 mov m,a
|
|
|
|
00A0 2AB300 lhld x$i$bufptr
|
|
00A3 116100 lxi d,meta$updates
|
|
00A6 19 dad d
|
|
00A7 3E00 mvi a,0
|
|
00A9 77 mov m,a
|
|
00AA 23 inx h
|
|
00AB 77 mov m,a
|
|
|
|
00AC 2AB300 lhld x$i$bufptr
|
|
00AF CD0300 call x$u$meta
|
|
|
|
00B2 C9 ret
|
|
|
|
00B3 x$i$bufptr ds 2
|
|
|
|
;-------------------------------------------
|
|
|
|
page
|
|
|
|
|
|
public x$g$meta
|
|
x$g$meta;
|
|
|
|
00B5 220501 shld x$g$bufptr ; entry hl has bufptr
|
|
00B8 79 mov a,c ; entry c has drivenum
|
|
00B9 320701 sta x$g$drivenum
|
|
|
|
; lda x$g$drivenum
|
|
00BC 4F mov c,a
|
|
00BD CD1BE6 call BISELDSK
|
|
|
|
00C0 010000 lxi b,0
|
|
00C3 CD1EE6 call BISETTRK
|
|
|
|
00C6 010B00 lxi b,11
|
|
00C9 CD21E6 call BISETSEC
|
|
|
|
00CC 2A0501 lhld x$g$bufptr
|
|
00CF E5 push h
|
|
00D0 C1 pop b
|
|
00D1 CD24E6 call BISETDMA
|
|
|
|
00D4 CD27E6 call BIREAD
|
|
|
|
00D7 2A0501 lhld x$g$bufptr
|
|
00DA 110100 lxi d,meta$siga5
|
|
00DD 19 dad d
|
|
00DE 7E mov a,m
|
|
00DF FEA5 cpi 0a5h
|
|
00E1 C2F400 jnz x$g$needs$init
|
|
|
|
00E4 2A0501 lhld x$g$bufptr
|
|
00E7 110000 lxi d,meta$sig5a
|
|
00EA 19 dad d
|
|
00EB 7E mov a,m
|
|
00EC FE5A cpi 05ah
|
|
00EE C2F400 jnz x$g$needs$init
|
|
|
|
00F1 C3FF00 jmp x$g$fini
|
|
|
|
x$g$needs$init:
|
|
|
|
00F4 2A0501 lhld x$g$bufptr
|
|
00F7 CD6100 call x$i$meta
|
|
|
|
00FA 0E00 mvi c,0 ; default to 0 per Wayne
|
|
00FC CD2AE6 call BIWRITE
|
|
|
|
x$g$fini:
|
|
00FF 0E0D mvi c,13
|
|
0101 CD0500 call BDOS
|
|
0104 C9 ret
|
|
|
|
0105 x$g$bufptr ds 2
|
|
0107 x$g$drivenum ds 1
|
|
|
|
;-----------------------------------
|
|
|
|
page
|
|
|
|
|
|
public x$p$meta
|
|
x$p$meta:
|
|
0108 226001 shld x$p$bufptr
|
|
010B 79 mov a,c
|
|
010C 326201 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
|
|
010F 2A6001 lhld x$p$bufptr ; hl -> buffer
|
|
0112 116100 lxi d,meta$updates ; de = offset to updates word
|
|
0115 19 dad d ; hl -> updates word
|
|
0116 5E mov e,m ; e = LO byte of updates
|
|
0117 23 inx h ; hl -> HO byte
|
|
0118 56 mov d,m ; d = HO byte of updates
|
|
0119 13 inx d ; increment DE (updates)
|
|
011A 72 mov m,d ; put back HO byte
|
|
011B 2B dcx h ; back up ptr
|
|
011C 73 mov m,e ; put back LO byte
|
|
|
|
; update last written version quad
|
|
011D 2A6001 lhld x$p$bufptr
|
|
0120 116300 lxi d,meta$rmj
|
|
0123 19 dad d
|
|
0124 3E02 mvi a,A$RMJ
|
|
0126 77 mov m,a
|
|
0127 23 inx h
|
|
0128 3E05 mvi a,A$RMN
|
|
012A 77 mov m,a
|
|
012B 23 inx h
|
|
012C 78 mov a,A$RUP
|
|
012D 77 mov m,a
|
|
012E 23 inx h
|
|
012F 3E01 mvi a,A$RTP
|
|
0131 77 mov m,a
|
|
|
|
0132 2A6001 lhld x$p$bufptr
|
|
0135 116000 lxi d,meta$prot
|
|
0138 19 dad d
|
|
0139 7E mov a,m
|
|
013A FE01 cpi TRUE ; if metadata is write protected
|
|
013C CA5F01 jz x$p$fini ; jump around update code
|
|
013F 3A6201 lda x$p$drivenum
|
|
0142 4F mov c,a
|
|
0143 CD1BE6 call BISELDSK
|
|
0146 010000 lxi b,0
|
|
0149 CD1EE6 call BISETTRK
|
|
014C 010B00 lxi b,11
|
|
014F CD21E6 call BISETSEC
|
|
0152 2A6001 lhld x$p$bufptr
|
|
0155 E5 push h
|
|
0156 C1 pop b
|
|
0157 CD24E6 call BISETDMA
|
|
|
|
015A 0E00 mvi c,0 ; default to 0 per Wayne
|
|
015C CD2AE6 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:
|
|
015F C9 ret
|
|
|
|
0160 x$p$bufptr ds 2
|
|
0162 x$p$drivenum ds 1
|
|
|
|
;-----------------------
|
|
|
|
page
|
|
|
|
|
|
public x$pr$meta
|
|
x$pr$meta:
|
|
0163 79 mov a,c
|
|
0164 32BF01 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
|
|
|
|
0167 3ABF01 lda x$pr$drivenum
|
|
016A 4F mov c,a
|
|
016B CD1BE6 call BISELDSK
|
|
016E 010000 lxi b,0
|
|
0171 CD1EE6 call BISETTRK
|
|
0174 010B00 lxi b,11
|
|
0177 CD21E6 call BISETSEC
|
|
017A 01C001 lxi b,x$pr$buffer
|
|
017D CD24E6 call BISETDMA
|
|
0180 CD27E6 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
|
|
|
|
0183 21C001 lxi h,x$pr$buffer
|
|
0186 116000 lxi d,meta$prot
|
|
0189 19 dad d
|
|
018A 3E01 mvi a,TRUE
|
|
018C 77 mov m,a
|
|
|
|
|
|
018D 21C001 lxi h,x$pr$buffer
|
|
0190 116100 lxi d,meta$updates
|
|
0193 19 dad d
|
|
0194 5E mov e,m
|
|
0195 23 inx h
|
|
0196 56 mov d,m
|
|
0197 13 inx d
|
|
0198 72 mov m,d
|
|
0199 2B dcx h
|
|
019A 73 mov m,e
|
|
|
|
019B 3ABF01 lda x$pr$drivenum
|
|
019E 4F mov c,a
|
|
019F CD1BE6 call BISELDSK
|
|
01A2 010000 lxi b,0
|
|
01A5 CD1EE6 call BISETTRK
|
|
01A8 010B00 lxi b,11
|
|
01AB CD21E6 call BISETSEC
|
|
01AE 01C001 lxi b,x$pr$buffer
|
|
01B1 CD24E6 call BISETDMA
|
|
|
|
01B4 0E00 mvi c,0 ; default to 0 per Wayne
|
|
01B6 CD2AE6 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
|
|
|
|
01B9 0E0D mvi c,13
|
|
01BB CD0500 call BDOS
|
|
|
|
01BE C9 ret
|
|
|
|
|
|
01BF x$pr$drivenum ds 1
|
|
01C0 x$pr$buffer ds 128
|
|
|
|
;-----------------------
|
|
|
|
page
|
|
|
|
|
|
public x$un$meta
|
|
x$un$meta:
|
|
0240 79 mov a,c
|
|
0241 329C02 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
|
|
|
|
0244 3A9C02 lda x$un$drivenum
|
|
0247 4F mov c,a
|
|
0248 CD1BE6 call BISELDSK
|
|
024B 010000 lxi b,0
|
|
024E CD1EE6 call BISETTRK
|
|
0251 010B00 lxi b,11
|
|
0254 CD21E6 call BISETSEC
|
|
0257 019D02 lxi b,x$un$buffer
|
|
025A CD24E6 call BISETDMA
|
|
025D CD27E6 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
|
|
|
|
0260 219D02 lxi h,x$un$buffer
|
|
0263 116000 lxi d,meta$prot
|
|
0266 19 dad d
|
|
0267 3E00 mvi a,FALSE
|
|
0269 77 mov m,a
|
|
|
|
|
|
026A 219D02 lxi h,x$un$buffer
|
|
026D 116100 lxi d,meta$updates
|
|
0270 19 dad d
|
|
0271 5E mov e,m
|
|
0272 23 inx h
|
|
0273 56 mov d,m
|
|
0274 13 inx d
|
|
0275 72 mov m,d
|
|
0276 2B dcx h
|
|
0277 73 mov m,e
|
|
|
|
0278 3A9C02 lda x$un$drivenum
|
|
027B 4F mov c,a
|
|
027C CD1BE6 call BISELDSK
|
|
027F 010000 lxi b,0
|
|
0282 CD1EE6 call BISETTRK
|
|
0285 010B00 lxi b,11
|
|
0288 CD21E6 call BISETSEC
|
|
028B 019D02 lxi b,x$un$buffer
|
|
028E CD24E6 call BISETDMA
|
|
|
|
0291 0E00 mvi c,0 ; default to 0 per Wayne
|
|
0293 CD2AE6 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
|
|
|
|
0296 0E0D mvi c,13
|
|
0298 CD0500 call BDOS
|
|
|
|
029B C9 ret
|
|
|
|
029C x$un$drivenum ds 1
|
|
029D x$un$buffer ds 128
|
|
|
|
;-----------------------
|
|
|
|
; eof - metadata.asm
|
|
|