home *** CD-ROM | disk | FTP | other *** search
- ;> s.MapSetID
- ;
- ; 21 Nov 1993
-
- AREA MapSetIO,CODE,READONLY
-
- GET ^.h.RegNames
- GET ^.h.Macros
- GET ^.h.SWIs
- GET h.Head
- GET h.Macros
-
- IMPORT MWriteText
- IMPORT ReadMap
- IMPORT ConvertFromDAd
- IMPORT FirstFreeFragment
- IMPORT BlankZeroes
- IMPORT NextID
- IMPORT WriteFragment
- IMPORT BlankZeroes
-
- EXPORT MapSetID_Code
- ;******************************************************************************
- ;
- ;MapSetID_Code ; -----
- ;-------------
- ; on entry:
- ; r0 "[<disc spec.>] <frag. start> <fragment length> <new ID>"
- ;
- Routine "MapSetID_Code","r1-r11"
- LDR wb,[r12]
- BL ReadMap
- BVS exitMSI
- MOV r1,r0
- MOV r0,#&80000010
- SWI XOS_ReadUnsigned
- MOVVC r5,r2 ; r5 DAd
- SWIVC XOS_ReadUnsigned
- MOVVC r3,r2 ; r3 length in bytes
- ORRVC r0,r0,#&20000000
- MOVVC r2,#&010000
- SWIVC XOS_ReadUnsigned
- STRVC r2,fragmentID
- BVS exitMSI
-
- LDRB r10,LogBitSize
- MOV r6,r3,ASR r10 ; r6 length in map bits
- TEQ r3,r10,ASL r10
- SETV NE
- ADRVS r0,badLengthError
- BVS exitMSI
- STR r6,fragmentLength
-
- MOV r0,r5
- BL ConvertFromDAd ; r3 zone number
- MOV r4,r0 ; r4 start in map bits
- STR r4,fragmentStart ; now fragment* all set up
-
- LDR r11,MapLocation
- MOV r10,r4 ; r10 map pos
- BL FirstFreeFragment ; r9 next free fragment
- BL NextID
- MOV r8,r0 ; r8 old ID
-
- ADD r2,r3,#1
- LDRB r14,LogSectorSize
- ADD r14,r14,#3
- MOVS r10,r3,ASL r14 ; r10 start of zone in map bits
- ADDNE r10,r10,#32 ; skip checkbytes
- ADDEQ r10,r10,#512
- MOV r4,r2,ASL r14 ; r4 end of zone in map bits
- loopMSI
-
-
-
- LDR r4,MapEnd
-
-
-
- ADR r1,Buffer
- MOV r2,#BufferSize
- Write "Fragment: ("
- MOVVC r0,r9
- MOVVC r3,r10
- BLVC WriteFragment
- ADRVC r0,Buffer
- BLVC BlankZeroes
- BVS exitMSI
- WriteB """)"",10,13,""Old ID: """
- MOVVC r0,r8
- SWIVC XOS_ConvertHex4
- BVS exitMSI
- WriteB "10,13,""New ID: """
- MOVVC r0,r11
- SWIVC XOS_ConvertHex4
-
- ADRVC r0,Buffer
- SWIVC XOS_Write0
-
- exitMSI
- RoutineEnd
-
- badLengthError
- & &006002
- = "The length of a fragment must be a multiple of the bytes per "
- = "map bit value.",0
- ALIGN
-
-
- END
-