mirror of
https://github.com/UzixLS/TSConf_MiST.git
synced 2025-07-19 07:11:22 +03:00
Initial commit.
This commit is contained in:
BIN
src/loader_fat32/.DS_Store
vendored
Normal file
BIN
src/loader_fat32/.DS_Store
vendored
Normal file
Binary file not shown.
318
src/loader_fat32/bin2hex.py
Normal file
318
src/loader_fat32/bin2hex.py
Normal file
@ -0,0 +1,318 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
File: bin2hex.py
|
||||
Converts a binary file into intel hex format. For usage try $bin2hex.py -h
|
||||
License
|
||||
The MIT License
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this hardware, software, and associated documentation files (the
|
||||
"Product"), to deal in the Product without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Product, and to permit
|
||||
persons to whom the Product is furnished to do so, subject to the
|
||||
following conditions:
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Product.
|
||||
THE PRODUCT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
PRODUCT OR THE USE OR OTHER DEALINGS IN THE PRODUCT.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import errno
|
||||
import optparse
|
||||
import struct
|
||||
|
||||
HEX_TYPE_DATA = 0
|
||||
HEX_TYPE_EOF = 1
|
||||
HEX_TYPE_EXT_SEG_ADDRESS = 2
|
||||
HEX_TYPE_START_SEG_ADDRESS = 3
|
||||
HEX_TYPE_EXT_LINEAR_ADDRESS = 4
|
||||
HEX_TYPE_START_LINEAR_ADDRESS = 5
|
||||
|
||||
HEX_ALLOWED_ADDRESS_TYPES ={
|
||||
0:(1<<16)-1,
|
||||
2:(1<<20)-1,
|
||||
4:(1<<32)-1,
|
||||
}
|
||||
|
||||
class HexRecord:
|
||||
def __init__(self, type, data, checksum = None, address = 0):
|
||||
self.__type = type
|
||||
self.__data = data
|
||||
self.__length = len(data)
|
||||
self.__address = address
|
||||
|
||||
self.__checksum = self.__length + (address >> 8) + (address & 0xFF) + type
|
||||
for b in data:
|
||||
self.__checksum += b
|
||||
self.__checksum = (~self.__checksum) + 1
|
||||
self.__checksum = self.__checksum & 0xFF
|
||||
if (checksum is not None) and (self.__checksum != checksum):
|
||||
raise Exception("Error: Checksum does not match. Calculated %02X. Given %02X." % (self.__checksum, checksum))
|
||||
|
||||
def getType(self):
|
||||
return self.__type
|
||||
|
||||
def getData(self):
|
||||
return self.__data
|
||||
|
||||
def getAddress(self):
|
||||
return self.__address
|
||||
|
||||
def getRecord(self):
|
||||
# return string representation of the record.
|
||||
recordstr = ":%02X%04X%02X%s%02X" % (self.__length,
|
||||
self.__address,
|
||||
self.__type,
|
||||
"".join(["%02X" % b for b in self.__data]),
|
||||
self.__checksum)
|
||||
return recordstr
|
||||
|
||||
def write(self, stream=sys.stdout):
|
||||
# write the record to stream
|
||||
stream.write(":%02X%04X%02X" % (self.__length, self.__address, self.__type))
|
||||
for b in self.__data:
|
||||
stream.write("%02X" % b)
|
||||
stream.write("%02X\n" % self.__checksum)
|
||||
|
||||
|
||||
def readHexFile(stream):
|
||||
records = []
|
||||
lineNum = 0
|
||||
for line in stream:
|
||||
lineNum += 1
|
||||
line = line.strip()
|
||||
if len(line) == 0:
|
||||
break
|
||||
|
||||
if line[0] != ":":
|
||||
raise Exception("Error on line %d. Record does not start with ':' character. Starts with '%s'." % (lineNum, line[0]))
|
||||
|
||||
byteCount = int(line[1:3], 16)
|
||||
address = int(line[3:7], 16)
|
||||
type = int(line[7:9], 16)
|
||||
if len(line) != (11 + 2*byteCount):
|
||||
raise Exception("Bad byteCount on line %d lineNum. Line length is %d chars, expected %d for byteCount %d." % (lineNum, len(line), 11+2*byteCount, byteCount))
|
||||
|
||||
data = []
|
||||
for i in range(byteCount):
|
||||
hexPair = line[(9+2*i):(9+2*i+2)]
|
||||
byte = int(hexPair, 16)
|
||||
data.append(byte)
|
||||
|
||||
checkSum = int(line[-2:], 16)
|
||||
records.append(HexRecord(type, data, checkSum, address))
|
||||
|
||||
return records
|
||||
|
||||
def generatehexfile(inputlist, hexsubsettype=4):
|
||||
''' From a sorted (by address) list of (address, binaryfilepath) tuples,
|
||||
produce a hex file string and return it. Assumes arguments are OK.
|
||||
Only hex subtype 4 is implemented.
|
||||
'''
|
||||
|
||||
hexout = []
|
||||
|
||||
if (hexsubsettype == 4):
|
||||
recordlength = 32
|
||||
elif (hexsubsettype == 2):
|
||||
recordlength = 16
|
||||
else:
|
||||
# not implemented
|
||||
return ''.join(hexout)
|
||||
|
||||
# current address and segment address are carried between subfiles.
|
||||
curraddr = 0
|
||||
segaddr = 0
|
||||
for (addr, binfile) in inputlist:
|
||||
# open the file for processing
|
||||
with open(binfile, 'rb') as f:
|
||||
fsize = os.path.getsize(binfile)
|
||||
|
||||
# set starting address.
|
||||
if addr >= (curraddr + segaddr):
|
||||
curraddr = addr - segaddr
|
||||
|
||||
else:
|
||||
# shouldn't be out of order this way. error.
|
||||
raise UserWarning("Error: binfiles are out of order. Contact tool smith.")
|
||||
|
||||
# work through the file generating & storing records as we go
|
||||
while f.tell() != fsize:
|
||||
# check if we need a new segment
|
||||
if (curraddr & 0xFFFF0000) != 0:
|
||||
# set new segaddr
|
||||
segaddr = (curraddr & 0xFFFF0000) + segaddr
|
||||
|
||||
if hexsubsettype == 4:
|
||||
hexout.append(HexRecord(HEX_TYPE_EXT_LINEAR_ADDRESS, [(segaddr >> 24) & 0xFF, (segaddr >> 16) & 0xFF]).getRecord())
|
||||
elif hexsubsettype == 2:
|
||||
hexout.append(HexRecord(HEX_TYPE_EXT_SEG_ADDRESS, [(segaddr >> 12) & 0xFF, (segaddr >> 4) & 0xFF]).getRecord())
|
||||
else:
|
||||
raise UserWarning("Error: somehow hexsubsettype is broken, contact tool smith.")
|
||||
# advance address pointer
|
||||
curraddr = curraddr & 0x0000FFFF
|
||||
|
||||
# read up to recordlength bytes from the file, don't bridge segment.
|
||||
if (curraddr + recordlength) > 0x10000:
|
||||
bytestoread = (curraddr + recordlength) - 0x10000;
|
||||
else:
|
||||
bytestoread = recordlength
|
||||
|
||||
bindata = f.read(bytestoread)
|
||||
# bindata = struct.unpack('B'*len(bindata),bindata) # better to use ord actually
|
||||
bindata = map(ord, bindata)
|
||||
hexout.append(HexRecord(HEX_TYPE_DATA, bindata, address=curraddr).getRecord())
|
||||
curraddr += len(bindata)
|
||||
|
||||
# add end of file record
|
||||
hexout.append(HexRecord(HEX_TYPE_EOF, []).getRecord())
|
||||
|
||||
return hexout
|
||||
|
||||
def checkhextypearg(option, opt, value, parser):
|
||||
# check hex type argument
|
||||
if value not in HEX_ALLOWED_ADDRESS_TYPES:
|
||||
raise optparse.OptionValueError ("Error: HEX format subset type %d not acceptable."%value)
|
||||
|
||||
setattr(parser.values, option.dest, value)
|
||||
|
||||
def commandline_split(option, opt, value, parser):
|
||||
# check the binary input
|
||||
binlist = value.split(',')
|
||||
if len(value.split(','))%2 != 0:
|
||||
raise optparse.OptionValueError("Error: each input binary must have a corresponding address")
|
||||
|
||||
# convert to list of lists of (address, binfile)
|
||||
binlist = map(list, zip(*[iter(binlist)]*2))
|
||||
binlistout = []
|
||||
|
||||
# make sure each argument in each pair is OK
|
||||
for [addr, binfile] in (binlist):
|
||||
# convert address to int. int() will raise any format errors
|
||||
rawaddr = addr
|
||||
if addr.find('0x') == 0:
|
||||
addr = int(addr, 16)
|
||||
else:
|
||||
addr = int(addr)
|
||||
if addr > 0xFFFFFFFF:
|
||||
raise optparse.OptionValueError("Error: address (%s, %s) exceeds 4gb."%(rawaddr, binfile))
|
||||
|
||||
# ensure binfile path is ok, and abs it.
|
||||
if os.path.isfile(binfile):
|
||||
binfile = os.path.abspath(binfile)
|
||||
else:
|
||||
raise optparse.OptionValueError("Error: binfile path (%s, %s) is unacceptable"%(rawaddr, binfile))
|
||||
|
||||
# save it to the output list as a tuple (unmodifiable after this), and
|
||||
# save the converted values to a list for examination later
|
||||
binlistout.append((addr, binfile))
|
||||
|
||||
# now check if any file(size) + address will overlap another
|
||||
for i, binentry1 in enumerate(binlistout):
|
||||
for j, binentry2 in enumerate(binlistout):
|
||||
if (binentry1[0] < binentry2[0]) and (binentry1[0] + os.path.getsize(binentry1[1]) > binentry2[0]):
|
||||
raise optparse.OptionValueError("Error: binfile entry %s overlaps %s"%(str(binlist[i]), str(binlist[j])))
|
||||
|
||||
# also check if addr + filesize is going to overflow 4gb limit
|
||||
if binentry1[0] + os.path.getsize(binentry1[1]) > (1<<32)-1:
|
||||
raise optparse.OptionValueError("Error: binfile entry %s exceeds 4gb limit"%(str(binlist[i])))
|
||||
|
||||
# sort the output list (by address)
|
||||
binlistout.sort()
|
||||
|
||||
setattr(parser.values, option.dest, binlistout)
|
||||
|
||||
def process_command_line(argv=None):
|
||||
'''
|
||||
Return a 2-tuple: (settings object, args list).
|
||||
`argv` is a list of arguments, or `None` for ``sys.argv[1:]``.
|
||||
'''
|
||||
if argv is None:
|
||||
if len(sys.argv[1:]):
|
||||
argv = sys.argv[1:]
|
||||
else:
|
||||
argv = ['-h']
|
||||
|
||||
# initialize the parser object:
|
||||
parser = optparse.OptionParser(
|
||||
formatter=optparse.TitledHelpFormatter(width=70),
|
||||
add_help_option=None)
|
||||
|
||||
# define options here:
|
||||
parser.add_option('-r', '--format', dest='format', type="int",
|
||||
default=4, action='callback', callback=checkhextypearg,
|
||||
help='HEX format subtype. 0 is I8HEX, 2 is I16HEX, 4 is I32HEX. Default is %default. ONLY 2 AND 4 ACCEPTED RIGHT NOW.')
|
||||
parser.add_option('-b', '--binaries', dest='binaries', type='string',
|
||||
default=None, action='callback', callback=commandline_split,
|
||||
help='List of binary file inputs and start addresses. Addresses are either decimal or hex (must be prepended with 0x).', metavar='ADDRESS,FILE,ADDRESS,FILE,...')
|
||||
parser.add_option('-o', '--outfile', dest='outfile',
|
||||
default=None,
|
||||
help='Output file path, optional, defaults to first input binary file dot hex.', metavar='PATH')
|
||||
parser.add_option('-q', '--quiet',action="store_true", dest="quiet",
|
||||
default=False,
|
||||
help="Suppress non-critical output on stdout.")
|
||||
parser.add_option('-v', '--version',dest='version',
|
||||
action="store_true",
|
||||
default=False,
|
||||
help='Print version and exit.')
|
||||
parser.add_option('-h', '--help', action='help',
|
||||
help='Show this help message and exit.')
|
||||
|
||||
settings, args = parser.parse_args(argv)
|
||||
|
||||
# check number of arguments, verify values, etc.:
|
||||
if args:
|
||||
parser.error('error in arguments; '
|
||||
'"%s" ignored.' % (args,))
|
||||
|
||||
# further process settings & args if necessary
|
||||
|
||||
return settings, args
|
||||
|
||||
if __name__ == "__main__":
|
||||
# set args and evaluate them
|
||||
# http://docs.python.org/2/library/optparse.html#optparse-extending-optparse
|
||||
settings,args = process_command_line()
|
||||
if settings.version:
|
||||
print "bin2hex.py %s"%("0.1")
|
||||
sys.exit(0)
|
||||
|
||||
# make sure the selected hex record type can represent the largest address
|
||||
maxaddress = HEX_ALLOWED_ADDRESS_TYPES[settings.format]
|
||||
for (addr, binfile) in settings.binaries:
|
||||
# don't check filesize, if it's good enough for gnu objcopy it's ok for us.
|
||||
#if (addr + os.path.getsize(binfile)) > maxaddress:
|
||||
#print "Error, address+binfile size 0x%0X is too large for format!"%(addr + os.path.getsize(binfile))
|
||||
if addr > maxaddress:
|
||||
print "Error, address size 0x%0X is too large for format!"%(addr)
|
||||
exit(errno.EINVAL)
|
||||
|
||||
# check output file
|
||||
try:
|
||||
if settings.outfile is None:
|
||||
# set output file based on first input file.
|
||||
settings.outfile = os.path.splitext(settings.binaries[0][1])[0]+".hex"
|
||||
# raise ValueError("Output file must be set!")
|
||||
|
||||
# now check the output file, make sure we can open it
|
||||
with open(settings.outfile, 'w') as f:
|
||||
pass
|
||||
except Exception as inst:
|
||||
print "Error with output file: %s"%inst
|
||||
sys.exit(errno.EINVAL)
|
||||
|
||||
# now, produce the hex file from the input files and addresses
|
||||
hexfiledata = generatehexfile(settings.binaries, settings.format)
|
||||
|
||||
# save it to the selected output file
|
||||
with open(settings.outfile, 'w') as f:
|
||||
f.write('\n'.join(hexfiledata))
|
||||
f.write('\n') # trailing newline
|
||||
|
214
src/loader_fat32/loader.asm
Normal file
214
src/loader_fat32/loader.asm
Normal file
@ -0,0 +1,214 @@
|
||||
DEVICE ZXSPECTRUM48
|
||||
; -----------------------------------------------------------------------------
|
||||
; LOADER(FAT32)
|
||||
; -----------------------------------------------------------------------------
|
||||
TX_Port EQU #F8EF
|
||||
;-----CONST-----
|
||||
TOTAL_PAGE EQU 31 ; 31(512kB ROM) //+ 2 (32kB) GS ROM
|
||||
Start EQU #0000 ; BANK0 (ROM)
|
||||
;================== LOADER EXEC CODE ==========================================
|
||||
ORG Start ; Exec code - Bank0:
|
||||
JP StartProg
|
||||
;- LOADER ID -------------------------
|
||||
;DB "LOADER(FAT32) V2.0/2014.09.10 | "
|
||||
;DB "LOADED FILES:"
|
||||
;- Name of ROMs files-----------------
|
||||
FES1 DB #10 ;flag (#00 - file, #10 - dir)
|
||||
DB "ROMS" ;DIR name
|
||||
DB 0
|
||||
;------
|
||||
FES2 DB #00 ;flag (#00 - file, #10 - dir)
|
||||
DB "ZXEVO.ROM" ;file name //"TEST128.ROM"
|
||||
DB 0
|
||||
;-------------------------------------
|
||||
;------
|
||||
;FES3 DB #00 ;flag (#00 - file, #10 - dir)
|
||||
; DB "GS105A.ROM" ;file name - 32kB
|
||||
; DB 0
|
||||
;ORG #F0
|
||||
;DB "Start Prog 0x100"
|
||||
;=======================================================================
|
||||
;ORG #100 ; Reserve 512byte
|
||||
StartProg
|
||||
DI ; DISABLE INT (PAGE2)
|
||||
LD SP,PWA ; STACK_ADDR = BUFZZ+#4000; 0xC000-x
|
||||
LD BC,SYC,A,DEFREQ:OUT(C), A ;SET DEFREQ:%00000010-14MHz
|
||||
; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> STACK - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
;---PAGE3
|
||||
LD B,PW3/256 : IN A,(C) ;READ PAGE3 //PW3:#13AF
|
||||
LD (PGR3),A ;(PGR3) <- SAVE orig PAGE3
|
||||
;---PAGE2
|
||||
LD B,PW2/256 : IN A,(C) ;READ PAGE2 //PW2:#12AF
|
||||
LD E,PG0: OUT (C),E ;SET PAGE2=0xF7
|
||||
LD (PGR),A ;(PGR) <- SAVE orig PAGE2
|
||||
;=======================================================
|
||||
|
||||
;=============== SD_LOADER========================================
|
||||
SD_LOADER
|
||||
;step_1 ======== INIT SD CARD ========
|
||||
;LD A, #00
|
||||
;CALL COM_TX
|
||||
;-------
|
||||
LD A, #00 ;STREAM: SD_INIT, HDD
|
||||
CALL FAT_DRV
|
||||
JR NZ,ERR ;INIT - FAILED
|
||||
;step_2 ======= find DIR entry =======
|
||||
LD HL,FES1
|
||||
LD A, #01 ;find DIR entry
|
||||
CALL FAT_DRV
|
||||
JR NZ,ERR ;dir not found
|
||||
;-------------------------------------
|
||||
LD A, #02 ;SET CURR DIR - ACTIVE
|
||||
CALL FAT_DRV
|
||||
;step_3 ======= find File entry ====
|
||||
LD HL,FES2
|
||||
LD A, #01 ;find File entry
|
||||
CALL FAT_DRV
|
||||
JR NZ,ERR ;file not found
|
||||
;step_4 ======= download data =======
|
||||
LD A, #0 ;#0 - start page
|
||||
CALL FAT32_LOADER ;
|
||||
;step_5 ======= find File entry ======
|
||||
;-------------------------------------
|
||||
; LD HL,FES3
|
||||
; LD A, #01 ;find File entry
|
||||
; CALL FAT_DRV
|
||||
; JR NZ,ERR ;file not found
|
||||
;step_6 ======= download data ========
|
||||
; LD A, 32 ;32 - start page DEC
|
||||
; CALL FAT32_LOADER ;
|
||||
;step_7 ======= INIT VS
|
||||
; CALL VS_INIT
|
||||
;----------------------
|
||||
;LD A, #01
|
||||
;CALL COM_TX
|
||||
;----------------------
|
||||
JP RESET_LOADER
|
||||
;========================================================================================
|
||||
FAT32_LOADER
|
||||
;----------- Open 1st Page = ROM ========================================
|
||||
;LD A, #0 ;download in page #0
|
||||
LD (block_16kB_cnt), A ; RESTORE block_16kB_cnt
|
||||
;CALL COM_TX
|
||||
;-------------------------------
|
||||
LD C, A ;page Number
|
||||
LD DE,#0000 ;offset in PAGE:
|
||||
LD B, 32 ;1 block-512Byte/32bloks-16kB
|
||||
LD A, #3 ;code 3: LOAD512(TSFAT.ASM) c
|
||||
CALL FAT_DRV ;return CDE - Address
|
||||
;-------------------------------------------------------------------------------------
|
||||
LOAD_16kb
|
||||
;-------------------------------------------------------------------------------------
|
||||
;------------------------- II ----------------------------------------
|
||||
;----------- Open 2snd Page = ROM
|
||||
LD A,(block_16kB_cnt) ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> A
|
||||
INC A ; block_16kB_cnt+1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 1
|
||||
LD (block_16kB_cnt), A ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
;CALL COM_TX
|
||||
;-----------
|
||||
LD C, A ;page
|
||||
LD DE,#0000 ;offset in Win3:
|
||||
LD B,32 ;1 block-512Byte // 32- 16kB
|
||||
;-load data from opened file-------
|
||||
LD A, #3 ;LOAD512(TSFAT.ASM)
|
||||
CALL FAT_DRV ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 16kB
|
||||
JR NZ,EXIT_FAT32_LOADER ;EOF -EXIT
|
||||
;-----------CHECK CNT--------------------------------------------
|
||||
LD A,(block_16kB_cnt) ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> A
|
||||
SUB TOTAL_PAGE ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>
|
||||
JR NZ,LOAD_16kb ; <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
; LOAD_16kb
|
||||
;=================================================================
|
||||
;---------------
|
||||
; JP VS_INIT
|
||||
; JP RESET_LOADER
|
||||
EXIT_FAT32_LOADER
|
||||
RET;
|
||||
;------------------------------------------------------------------------------
|
||||
ERR
|
||||
;------------------------------------------------------------------------------
|
||||
LD A,#02 ; ERROR: BORDER -RED!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
OUT (#FE),A ;
|
||||
HALT
|
||||
;==============================================================================
|
||||
;------------------------------------------------------------------------------
|
||||
; VS1053 Init
|
||||
;------------------------------------------------------------------------------
|
||||
VS_INIT
|
||||
LD A,%00000000 ; XCS=0 XDCS=0
|
||||
OUT (#05),A
|
||||
LD HL,TABLE
|
||||
LD B,44
|
||||
VS_INIT1 LD D,(HL)
|
||||
CALL VS_RW ; WR D ==>
|
||||
INC HL
|
||||
DJNZ VS_INIT1
|
||||
LD A,%00100000 ; XCS=0 XDCS=1
|
||||
OUT (#05),A
|
||||
RET
|
||||
;==============================================================================
|
||||
|
||||
;----------------RESTART-------------------------------------------------------
|
||||
RESET_LOADER
|
||||
;---ESTORE PAGE3
|
||||
LD BC,PW3,A,(PGR3):OUT (C),A
|
||||
;---ESTORE PAGE2
|
||||
LD BC,PW2,A,(PGR) :OUT (C),A
|
||||
;--------------------------------------------------
|
||||
LD A,%00000100 ; Bit2 = 0:Loader ON, 1:Loader OFF;
|
||||
LD BC,#0001
|
||||
OUT (C),A ; RESET LOADER
|
||||
LD SP,#FFFF
|
||||
JP #0000 ; RESTART SYSTEM
|
||||
;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> 0x0000, LOADER OFF !!!!!!!!!
|
||||
;================================ DRIVER ======================================
|
||||
;========TS-Labs==================================
|
||||
INCLUDE "tsfat/TSFAT.ASM" ;
|
||||
;---------------BANK2----------------------
|
||||
PGR3 EQU STRMED+1 ;
|
||||
block_16kB_cnt EQU STRMED+2 ;
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; VS1053
|
||||
;------------------------------------------------------------------------------
|
||||
VS_RW
|
||||
IN A,(#05)
|
||||
RLCA
|
||||
JR C,VS_RW
|
||||
RLCA
|
||||
JR NC,VS_RW
|
||||
LD A,D
|
||||
OUT (#04), A ; WR DATA
|
||||
|
||||
VS_RW1 IN A,(#05)
|
||||
RLCA
|
||||
JR C,VS_RW1
|
||||
RLCA
|
||||
JR NC,VS_RW1
|
||||
IN A,(#04)
|
||||
RET
|
||||
|
||||
TABLE DB #52,#49,#46,#46,#FF,#FF,#FF,#FF ;REFF....
|
||||
DB #57,#41,#56,#45,#66,#6D,#74,#20 ;WAVEfmt
|
||||
DB #10
|
||||
DB #00,#00,#00,#01,#00,#02,#00
|
||||
|
||||
DB #80,#BB,#00,#00 ;48kHz
|
||||
DB #00,#EE,#02,#00
|
||||
|
||||
DB #04,#00
|
||||
DB #10,#00
|
||||
DB #64,#61,#74,#61 ;data
|
||||
DB #FF,#FF,#FF,#FF
|
||||
;===================== COM_TX ================================
|
||||
;COM_TX
|
||||
; PUSH BC
|
||||
; LD BC, #F8EF
|
||||
; OUT (C), A
|
||||
; POP BC
|
||||
; RET
|
||||
;=============================================================
|
||||
savebin "loader.bin",Start, 8192
|
||||
;savebin "loader.bin",Start, 2048 ;-2K
|
||||
|
||||
|
BIN
src/loader_fat32/loader.bin
Normal file
BIN
src/loader_fat32/loader.bin
Normal file
Binary file not shown.
257
src/loader_fat32/loader.hex
Normal file
257
src/loader_fat32/loader.hex
Normal file
@ -0,0 +1,257 @@
|
||||
:20000000C3140010524F4D5300005A5845564F2E524F4D00F33100C001AF203E02ED7906A0
|
||||
:2000200013ED78328FA00612ED781EF7ED59320D963E00CDBA00204B2103003E01CDBA0020
|
||||
:2000400020413E02CDBA002109003E01CDBA0020323E00CD5900C39D003290A04F110000B0
|
||||
:2000600006203E03CDBA003A90A03C3290A04F11000006203E03CDBA0020073A90A0D61FB6
|
||||
:2000800020E5C93E02D3FE763E00D305210C08062C56CDF6072310F93E20D305C901AF1380
|
||||
:2000A0003A8FA0ED7901AF123A0D96ED793E04010100ED7931FFFFC30000D921CE00060002
|
||||
:2000C0004F09097E23666F01CD00C5E5D9C9D6000A012D017901C52100A0545D1336000125
|
||||
:2000E0008D00EDB0C1CD5807CDBD062015CDC5032014210000220F96221196AF4FC93E188D
|
||||
:20010000B7C93E08B7C93E0AB7C9CDD7022814220F96ED531196D9CD27012A3DA0ED5B3FE5
|
||||
:20012000A0AFC93E01B7C9210F96C37202210F96C370011121A00608CD5F01CD5001CC36C4
|
||||
:20014000067EFE2E2001230603CD5001CC3606C97EB7C8FE2E23C8121310F53E01B7C97E38
|
||||
:20016000FE2EC0122313057EFE2EC012231305C91181A0010400EDB0C9ED430B96EB7CE60B
|
||||
:200180003F67CD8B01ED4B0B96EBC9AF3203A0CD9F01200478CDB8012A69A03A02A0C922C6
|
||||
:2001A00069A03A02A0B7C03A01A0B72009C52161A0CD7202C1C9AFC93204A02A1DA0ED5BF9
|
||||
:2001C0001FA0CD2E062104A03A4DA0ED4B01A091477EB7C89030038047AF77783205A02A9C
|
||||
:2001E00069A0CD3D062269A0211DA01119A0010400EDB02A1DA0ED5B1FA0ED4B05A009306D
|
||||
:200200000113221DA0ED531FA02101A0798677ED4B4DA0B9DABB012A61A0ED5B63A0CD28D5
|
||||
:2002200002CD7202CABB01C9CD6205CB21CB10CB21CB10C5ED530DA0220BA0ED4B4BA07A4E
|
||||
:20024000B838107BB9380CED4B49A07CB838047DB9301CED4B5BA0CDC205CDC402CD2706BF
|
||||
:200260002100903E01CD3D06C121009009AFC9C137C9CD1F065E2356237E23666FB4B3B24F
|
||||
:2002800028347CE60FFE0F2836EB2261A0ED5363A0010200B7ED4230011B3A4DA0CDA805FF
|
||||
:2002A000ED4B5DA0CDC205EBED4B5FA009EBCDC402CD2706AFC92A4FA0ED5B51A018CB32F3
|
||||
:2002C00002A0B7C9ED4B57A0ED4315A0ED4B59A0ED4317A0C3C6057E23322CA0CD33012181
|
||||
:2002E00081A01161A0010400EDB0CD1F063A02A0FE0FC82100920601CD8B01360021E091AB
|
||||
:20030000CD0603C018E7012000097EB7C8CD160320F43E01B7C9E51121A0060BCD3E03CCC6
|
||||
:200320003703E1C0E51121A0012000EDB0C12A3BA0ED5B35A0AFC91A4F7EE610B9C91ABEDB
|
||||
:20034000C0231310F9C9ED430496ED530896220696CD9003C8CD7103ED5B0496B7ED52D05E
|
||||
:200360002A06965E2356237E23666FEBCD280218DD444D3A4DA02A089671237023732372C1
|
||||
:20038000232208963DC8030878B12001130818E95E2356237E23666FB4B3B2C87CFE0FC862
|
||||
:2003A000EB010200B7ED4230011B3A4DA0CDA805ED4B5DA0CDC205EBED4B5FA009EBCDC40C
|
||||
:2003C000023E01B7C9210000545D2261A02263A0220696220896226CA0226EA0CD2706214B
|
||||
:2003E00000923E01CD3D063E03326BA0320A9621C29311100006047EFE052872FE0B286E71
|
||||
:20040000FE0C286AFE0F28661910EC3A0A96B7CA5E05ED5B08962A0696CD27062100923E3B
|
||||
:2004200001CD3D06216BA035CA500521CE930610AFB62310FCC250052AD693ED5BD8932280
|
||||
:2004400015A0ED5317A02A0696ED5B0896CDC605ED530896220696CD27062100923E01CD57
|
||||
:200460003D062AC693ED5BC893CDC605180D232323235E2356237E23666FEB2257A0ED5316
|
||||
:2004800059A0CD27062100923E01CD3D062A0B927C3D3DB5C20B043A0D92B7CA0B043A0E73
|
||||
:2004A00092B7CA0B043A1092B7CA0B042A11927CB52A1692B4B5C20B042A2492B4B52A260B
|
||||
:2004C00092B4B5CA0B043A0D92324DA00608CB3F380410FA3E01B7C20B042A0E922242A05D
|
||||
:2004E0002A3092110000CDC4022244A0ED5346A03A10923248A02A24922249A02A2692225B
|
||||
:200500004BA02A2C92224FA02A2E922251A02A49A0ED5B4BA0ED4B48A00600CDDD05E5D525
|
||||
:200520002A42A0225BA0D1C1CDC205225DA0ED535FA02100002261A02263A02281A02283BD
|
||||
:20054000A02153A00604AF772310FCCD1F06AFC92A6CA0ED5B6EA0AF320A96C37B043E0190
|
||||
:20056000B7C97D087D6C635A160017CB15CB14CB13CB1208E67F06004FC97D6C635A1600E2
|
||||
:20058000010100B7C4C2053E02FE02D80E00CB3FCB3ACB1BCB1CCB1DCB19CB3F30F279B7ED
|
||||
:2005A000C8010100CDC205C9FE02D8CB3FCB25CB14CB13CB12CB3F30F4C9060434C0231080
|
||||
:2005C000FBC909D013C9EBED4B17A009EBED4B15A0093001132215A0ED5317A0C978414FFB
|
||||
:2005E0000CB7200405282C04AFB820010D05E5C5626BB828041910FD470D20F9220FA0C19D
|
||||
:20060000E1545DB8280619380B10FB470D20F7ED5B0FA0C9D92A0FA023220FA0D918EAAFA0
|
||||
:200620003201A03202A0C9221DA0ED531FA02289A0ED538BA0C93E20121310FCC9ED5B89C4
|
||||
:20064000A0ED4B8BA0083E52CD9F070808CDE307FEFE20F9CD6906083D20F13E4CCD85073B
|
||||
:20066000CDE3073C20FAC34007C50EF77CFE803004ED4B0B96E63F5779E501AF13ED793E51
|
||||
:20068000C08267015700EDB200EDB200ED7800ED78E1110002197CFE40380EFE80300AE6A6
|
||||
:2006A0003F673A0B963C320B96C1C940000000009548000001AA875000000200FFCDC906E4
|
||||
:2006C000110200B7C0110000C9CD400701570011FF10ED591520FBAF0821AB06CD6A07CD20
|
||||
:2006E000E307083D286C083D20EF21B106CD6A07CDE307ED6000ED6000ED6000ED602100C1
|
||||
:2007000000CB57200226403E77CD8507CDE3073E69ED7900ED6100ED6900ED6900ED693ECF
|
||||
:20072000FFED79CDE307A720DE3E7BCD8507CDE307A720F521B706CD6A07CDE307A720F4E5
|
||||
:20074000D5C51E03017700ED591E000E57ED59C1D1C9CD58073E01C9AFD377D357C9D5C542
|
||||
:200760000177001E01ED59C1D1C9CD5E07C5015700EDA300EDA300EDA300EDA300EDA30022
|
||||
:20078000EDA300C1C9C5CD5E07015700ED79AFED7900ED7900ED7900ED793DED79C1C9E531
|
||||
:2007A000D5C5F5C50157003E7ACD8507CDE307ED7800ED6000ED6000ED60CB77E1200AEB41
|
||||
:2007C00029EBED6A656A531E00F1015700ED7900ED6100ED6900ED5100ED593EFFED79C133
|
||||
:2007E000D1E1C9C5D511FF10015700ED78BB20031520F8D1C1C9DB050738FB0730F87AD30B
|
||||
:2008000004DB050738FB0730F8DB04C952494646FFFFFFFF57415645666D74201000000016
|
||||
:200820000100020080BB000000EE02000400100064617461FFFFFFFF0000000000000000E0
|
||||
:20084000000000000000000000000000000000000000000000000000000000000000000098
|
||||
:20086000000000000000000000000000000000000000000000000000000000000000000078
|
||||
:20088000000000000000000000000000000000000000000000000000000000000000000058
|
||||
:2008A000000000000000000000000000000000000000000000000000000000000000000038
|
||||
:2008C000000000000000000000000000000000000000000000000000000000000000000018
|
||||
:2008E0000000000000000000000000000000000000000000000000000000000000000000F8
|
||||
:200900000000000000000000000000000000000000000000000000000000000000000000D7
|
||||
:200920000000000000000000000000000000000000000000000000000000000000000000B7
|
||||
:20094000000000000000000000000000000000000000000000000000000000000000000097
|
||||
:20096000000000000000000000000000000000000000000000000000000000000000000077
|
||||
:20098000000000000000000000000000000000000000000000000000000000000000000057
|
||||
:2009A000000000000000000000000000000000000000000000000000000000000000000037
|
||||
:2009C000000000000000000000000000000000000000000000000000000000000000000017
|
||||
:2009E0000000000000000000000000000000000000000000000000000000000000000000F7
|
||||
:200A00000000000000000000000000000000000000000000000000000000000000000000D6
|
||||
:200A20000000000000000000000000000000000000000000000000000000000000000000B6
|
||||
:200A4000000000000000000000000000000000000000000000000000000000000000000096
|
||||
:200A6000000000000000000000000000000000000000000000000000000000000000000076
|
||||
:200A8000000000000000000000000000000000000000000000000000000000000000000056
|
||||
:200AA000000000000000000000000000000000000000000000000000000000000000000036
|
||||
:200AC000000000000000000000000000000000000000000000000000000000000000000016
|
||||
:200AE0000000000000000000000000000000000000000000000000000000000000000000F6
|
||||
:200B00000000000000000000000000000000000000000000000000000000000000000000D5
|
||||
:200B20000000000000000000000000000000000000000000000000000000000000000000B5
|
||||
:200B4000000000000000000000000000000000000000000000000000000000000000000095
|
||||
:200B6000000000000000000000000000000000000000000000000000000000000000000075
|
||||
:200B8000000000000000000000000000000000000000000000000000000000000000000055
|
||||
:200BA000000000000000000000000000000000000000000000000000000000000000000035
|
||||
:200BC000000000000000000000000000000000000000000000000000000000000000000015
|
||||
:200BE0000000000000000000000000000000000000000000000000000000000000000000F5
|
||||
:200C00000000000000000000000000000000000000000000000000000000000000000000D4
|
||||
:200C20000000000000000000000000000000000000000000000000000000000000000000B4
|
||||
:200C4000000000000000000000000000000000000000000000000000000000000000000094
|
||||
:200C6000000000000000000000000000000000000000000000000000000000000000000074
|
||||
:200C8000000000000000000000000000000000000000000000000000000000000000000054
|
||||
:200CA000000000000000000000000000000000000000000000000000000000000000000034
|
||||
:200CC000000000000000000000000000000000000000000000000000000000000000000014
|
||||
:200CE0000000000000000000000000000000000000000000000000000000000000000000F4
|
||||
:200D00000000000000000000000000000000000000000000000000000000000000000000D3
|
||||
:200D20000000000000000000000000000000000000000000000000000000000000000000B3
|
||||
:200D4000000000000000000000000000000000000000000000000000000000000000000093
|
||||
:200D6000000000000000000000000000000000000000000000000000000000000000000073
|
||||
:200D8000000000000000000000000000000000000000000000000000000000000000000053
|
||||
:200DA000000000000000000000000000000000000000000000000000000000000000000033
|
||||
:200DC000000000000000000000000000000000000000000000000000000000000000000013
|
||||
:200DE0000000000000000000000000000000000000000000000000000000000000000000F3
|
||||
:200E00000000000000000000000000000000000000000000000000000000000000000000D2
|
||||
:200E20000000000000000000000000000000000000000000000000000000000000000000B2
|
||||
:200E4000000000000000000000000000000000000000000000000000000000000000000092
|
||||
:200E6000000000000000000000000000000000000000000000000000000000000000000072
|
||||
:200E8000000000000000000000000000000000000000000000000000000000000000000052
|
||||
:200EA000000000000000000000000000000000000000000000000000000000000000000032
|
||||
:200EC000000000000000000000000000000000000000000000000000000000000000000012
|
||||
:200EE0000000000000000000000000000000000000000000000000000000000000000000F2
|
||||
:200F00000000000000000000000000000000000000000000000000000000000000000000D1
|
||||
:200F20000000000000000000000000000000000000000000000000000000000000000000B1
|
||||
:200F4000000000000000000000000000000000000000000000000000000000000000000091
|
||||
:200F6000000000000000000000000000000000000000000000000000000000000000000071
|
||||
:200F8000000000000000000000000000000000000000000000000000000000000000000051
|
||||
:200FA000000000000000000000000000000000000000000000000000000000000000000031
|
||||
:200FC000000000000000000000000000000000000000000000000000000000000000000011
|
||||
:200FE0000000000000000000000000000000000000000000000000000000000000000000F1
|
||||
:201000000000000000000000000000000000000000000000000000000000000000000000D0
|
||||
:201020000000000000000000000000000000000000000000000000000000000000000000B0
|
||||
:20104000000000000000000000000000000000000000000000000000000000000000000090
|
||||
:20106000000000000000000000000000000000000000000000000000000000000000000070
|
||||
:20108000000000000000000000000000000000000000000000000000000000000000000050
|
||||
:2010A000000000000000000000000000000000000000000000000000000000000000000030
|
||||
:2010C000000000000000000000000000000000000000000000000000000000000000000010
|
||||
:2010E0000000000000000000000000000000000000000000000000000000000000000000F0
|
||||
:201100000000000000000000000000000000000000000000000000000000000000000000CF
|
||||
:201120000000000000000000000000000000000000000000000000000000000000000000AF
|
||||
:2011400000000000000000000000000000000000000000000000000000000000000000008F
|
||||
:2011600000000000000000000000000000000000000000000000000000000000000000006F
|
||||
:2011800000000000000000000000000000000000000000000000000000000000000000004F
|
||||
:2011A00000000000000000000000000000000000000000000000000000000000000000002F
|
||||
:2011C00000000000000000000000000000000000000000000000000000000000000000000F
|
||||
:2011E0000000000000000000000000000000000000000000000000000000000000000000EF
|
||||
:201200000000000000000000000000000000000000000000000000000000000000000000CE
|
||||
:201220000000000000000000000000000000000000000000000000000000000000000000AE
|
||||
:2012400000000000000000000000000000000000000000000000000000000000000000008E
|
||||
:2012600000000000000000000000000000000000000000000000000000000000000000006E
|
||||
:2012800000000000000000000000000000000000000000000000000000000000000000004E
|
||||
:2012A00000000000000000000000000000000000000000000000000000000000000000002E
|
||||
:2012C00000000000000000000000000000000000000000000000000000000000000000000E
|
||||
:2012E0000000000000000000000000000000000000000000000000000000000000000000EE
|
||||
:201300000000000000000000000000000000000000000000000000000000000000000000CD
|
||||
:201320000000000000000000000000000000000000000000000000000000000000000000AD
|
||||
:2013400000000000000000000000000000000000000000000000000000000000000000008D
|
||||
:2013600000000000000000000000000000000000000000000000000000000000000000006D
|
||||
:2013800000000000000000000000000000000000000000000000000000000000000000004D
|
||||
:2013A00000000000000000000000000000000000000000000000000000000000000000002D
|
||||
:2013C00000000000000000000000000000000000000000000000000000000000000000000D
|
||||
:2013E0000000000000000000000000000000000000000000000000000000000000000000ED
|
||||
:201400000000000000000000000000000000000000000000000000000000000000000000CC
|
||||
:201420000000000000000000000000000000000000000000000000000000000000000000AC
|
||||
:2014400000000000000000000000000000000000000000000000000000000000000000008C
|
||||
:2014600000000000000000000000000000000000000000000000000000000000000000006C
|
||||
:2014800000000000000000000000000000000000000000000000000000000000000000004C
|
||||
:2014A00000000000000000000000000000000000000000000000000000000000000000002C
|
||||
:2014C00000000000000000000000000000000000000000000000000000000000000000000C
|
||||
:2014E0000000000000000000000000000000000000000000000000000000000000000000EC
|
||||
:201500000000000000000000000000000000000000000000000000000000000000000000CB
|
||||
:201520000000000000000000000000000000000000000000000000000000000000000000AB
|
||||
:2015400000000000000000000000000000000000000000000000000000000000000000008B
|
||||
:2015600000000000000000000000000000000000000000000000000000000000000000006B
|
||||
:2015800000000000000000000000000000000000000000000000000000000000000000004B
|
||||
:2015A00000000000000000000000000000000000000000000000000000000000000000002B
|
||||
:2015C00000000000000000000000000000000000000000000000000000000000000000000B
|
||||
:2015E0000000000000000000000000000000000000000000000000000000000000000000EB
|
||||
:201600000000000000000000000000000000000000000000000000000000000000000000CA
|
||||
:201620000000000000000000000000000000000000000000000000000000000000000000AA
|
||||
:2016400000000000000000000000000000000000000000000000000000000000000000008A
|
||||
:2016600000000000000000000000000000000000000000000000000000000000000000006A
|
||||
:2016800000000000000000000000000000000000000000000000000000000000000000004A
|
||||
:2016A00000000000000000000000000000000000000000000000000000000000000000002A
|
||||
:2016C00000000000000000000000000000000000000000000000000000000000000000000A
|
||||
:2016E0000000000000000000000000000000000000000000000000000000000000000000EA
|
||||
:201700000000000000000000000000000000000000000000000000000000000000000000C9
|
||||
:201720000000000000000000000000000000000000000000000000000000000000000000A9
|
||||
:20174000000000000000000000000000000000000000000000000000000000000000000089
|
||||
:20176000000000000000000000000000000000000000000000000000000000000000000069
|
||||
:20178000000000000000000000000000000000000000000000000000000000000000000049
|
||||
:2017A000000000000000000000000000000000000000000000000000000000000000000029
|
||||
:2017C000000000000000000000000000000000000000000000000000000000000000000009
|
||||
:2017E0000000000000000000000000000000000000000000000000000000000000000000E9
|
||||
:201800000000000000000000000000000000000000000000000000000000000000000000C8
|
||||
:201820000000000000000000000000000000000000000000000000000000000000000000A8
|
||||
:20184000000000000000000000000000000000000000000000000000000000000000000088
|
||||
:20186000000000000000000000000000000000000000000000000000000000000000000068
|
||||
:20188000000000000000000000000000000000000000000000000000000000000000000048
|
||||
:2018A000000000000000000000000000000000000000000000000000000000000000000028
|
||||
:2018C000000000000000000000000000000000000000000000000000000000000000000008
|
||||
:2018E0000000000000000000000000000000000000000000000000000000000000000000E8
|
||||
:201900000000000000000000000000000000000000000000000000000000000000000000C7
|
||||
:201920000000000000000000000000000000000000000000000000000000000000000000A7
|
||||
:20194000000000000000000000000000000000000000000000000000000000000000000087
|
||||
:20196000000000000000000000000000000000000000000000000000000000000000000067
|
||||
:20198000000000000000000000000000000000000000000000000000000000000000000047
|
||||
:2019A000000000000000000000000000000000000000000000000000000000000000000027
|
||||
:2019C000000000000000000000000000000000000000000000000000000000000000000007
|
||||
:2019E0000000000000000000000000000000000000000000000000000000000000000000E7
|
||||
:201A00000000000000000000000000000000000000000000000000000000000000000000C6
|
||||
:201A20000000000000000000000000000000000000000000000000000000000000000000A6
|
||||
:201A4000000000000000000000000000000000000000000000000000000000000000000086
|
||||
:201A6000000000000000000000000000000000000000000000000000000000000000000066
|
||||
:201A8000000000000000000000000000000000000000000000000000000000000000000046
|
||||
:201AA000000000000000000000000000000000000000000000000000000000000000000026
|
||||
:201AC000000000000000000000000000000000000000000000000000000000000000000006
|
||||
:201AE0000000000000000000000000000000000000000000000000000000000000000000E6
|
||||
:201B00000000000000000000000000000000000000000000000000000000000000000000C5
|
||||
:201B20000000000000000000000000000000000000000000000000000000000000000000A5
|
||||
:201B4000000000000000000000000000000000000000000000000000000000000000000085
|
||||
:201B6000000000000000000000000000000000000000000000000000000000000000000065
|
||||
:201B8000000000000000000000000000000000000000000000000000000000000000000045
|
||||
:201BA000000000000000000000000000000000000000000000000000000000000000000025
|
||||
:201BC000000000000000000000000000000000000000000000000000000000000000000005
|
||||
:201BE0000000000000000000000000000000000000000000000000000000000000000000E5
|
||||
:201C00000000000000000000000000000000000000000000000000000000000000000000C4
|
||||
:201C20000000000000000000000000000000000000000000000000000000000000000000A4
|
||||
:201C4000000000000000000000000000000000000000000000000000000000000000000084
|
||||
:201C6000000000000000000000000000000000000000000000000000000000000000000064
|
||||
:201C8000000000000000000000000000000000000000000000000000000000000000000044
|
||||
:201CA000000000000000000000000000000000000000000000000000000000000000000024
|
||||
:201CC000000000000000000000000000000000000000000000000000000000000000000004
|
||||
:201CE0000000000000000000000000000000000000000000000000000000000000000000E4
|
||||
:201D00000000000000000000000000000000000000000000000000000000000000000000C3
|
||||
:201D20000000000000000000000000000000000000000000000000000000000000000000A3
|
||||
:201D4000000000000000000000000000000000000000000000000000000000000000000083
|
||||
:201D6000000000000000000000000000000000000000000000000000000000000000000063
|
||||
:201D8000000000000000000000000000000000000000000000000000000000000000000043
|
||||
:201DA000000000000000000000000000000000000000000000000000000000000000000023
|
||||
:201DC000000000000000000000000000000000000000000000000000000000000000000003
|
||||
:201DE0000000000000000000000000000000000000000000000000000000000000000000E3
|
||||
:201E00000000000000000000000000000000000000000000000000000000000000000000C2
|
||||
:201E20000000000000000000000000000000000000000000000000000000000000000000A2
|
||||
:201E4000000000000000000000000000000000000000000000000000000000000000000082
|
||||
:201E6000000000000000000000000000000000000000000000000000000000000000000062
|
||||
:201E8000000000000000000000000000000000000000000000000000000000000000000042
|
||||
:201EA000000000000000000000000000000000000000000000000000000000000000000022
|
||||
:201EC000000000000000000000000000000000000000000000000000000000000000000002
|
||||
:201EE0000000000000000000000000000000000000000000000000000000000000000000E2
|
||||
:201F00000000000000000000000000000000000000000000000000000000000000000000C1
|
||||
:201F20000000000000000000000000000000000000000000000000000000000000000000A1
|
||||
:201F4000000000000000000000000000000000000000000000000000000000000000000081
|
||||
:201F6000000000000000000000000000000000000000000000000000000000000000000061
|
||||
:201F8000000000000000000000000000000000000000000000000000000000000000000041
|
||||
:201FA000000000000000000000000000000000000000000000000000000000000000000021
|
||||
:201FC000000000000000000000000000000000000000000000000000000000000000000001
|
||||
:201FE0000000000000000000000000000000000000000000000000000000000000000000E1
|
||||
:00000001FF
|
BIN
src/loader_fat32/loader_spiflash.zip
Normal file
BIN
src/loader_fat32/loader_spiflash.zip
Normal file
Binary file not shown.
7
src/loader_fat32/make.sh
Normal file
7
src/loader_fat32/make.sh
Normal file
@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm loader.bin
|
||||
rm loader.hex
|
||||
./sjasmplus loader.asm
|
||||
./bin2hex.py --binaries=0,loader.bin
|
||||
|
1
src/loader_fat32/tsfat/DMA.ASM
Normal file
1
src/loader_fat32/tsfat/DMA.ASM
Normal file
@ -0,0 +1 @@
|
||||
;--------------------------------------------------------------------------------
|
1
src/loader_fat32/tsfat/DSDTS.ASM
Normal file
1
src/loader_fat32/tsfat/DSDTS.ASM
Normal file
File diff suppressed because one or more lines are too long
1
src/loader_fat32/tsfat/DSDTS_DMA.ASM
Normal file
1
src/loader_fat32/tsfat/DSDTS_DMA.ASM
Normal file
File diff suppressed because one or more lines are too long
1
src/loader_fat32/tsfat/STREAM.ASM
Normal file
1
src/loader_fat32/tsfat/STREAM.ASM
Normal file
@ -0,0 +1 @@
|
||||
;---------------------------------------
|
1
src/loader_fat32/tsfat/TSFAT.ASM
Normal file
1
src/loader_fat32/tsfat/TSFAT.ASM
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user