Added multiply and convert functions, also added 32 bit int types
This commit is contained in:
parent
6e2ab11578
commit
7f014174b1
2
Makefile
2
Makefile
|
@ -13,8 +13,10 @@ ASFLAGS = -plosgff
|
|||
SRC = \
|
||||
src/crt0.s \
|
||||
src/bios.s \
|
||||
src/_mulint.s \
|
||||
src/random.c \
|
||||
src/console.c \
|
||||
src/convert.c \
|
||||
|
||||
OBJ_1 = $(notdir $(SRC:.c=.rel))
|
||||
OBJ_2 = $(notdir $(OBJ_1:.s=.rel))
|
||||
|
|
5
include/convert.h
Normal file
5
include/convert.h
Normal file
|
@ -0,0 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
#include "types.h"
|
||||
|
||||
uint32_t uint16_to_bcd(uint16_t value);
|
|
@ -1,7 +1,9 @@
|
|||
#pragma once
|
||||
|
||||
typedef signed char int8_t;
|
||||
typedef short int int16_t;
|
||||
typedef signed short int int16_t;
|
||||
typedef signed long int int32_t;
|
||||
|
||||
typedef unsigned char uint8_t;
|
||||
typedef unsigned short uint16_t;
|
||||
typedef unsigned short int uint16_t;
|
||||
typedef unsigned long int uint32_t;
|
||||
|
|
73
src/_mulint.s
Normal file
73
src/_mulint.s
Normal file
|
@ -0,0 +1,73 @@
|
|||
;--------------------------------------------------------------------------
|
||||
; _mulchar.s
|
||||
;
|
||||
; Copyright (C) 2000, Michael Hope
|
||||
;
|
||||
; This library 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 2, or (at your option) any
|
||||
; later version.
|
||||
;
|
||||
; This library 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 this library; see the file COPYING. If not, write to the
|
||||
; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
|
||||
; MA 02110-1301, USA.
|
||||
;
|
||||
; As a special exception, if you link this library with other files,
|
||||
; some of which are compiled with SDCC, to produce an executable,
|
||||
; this library does not by itself cause the resulting executable to
|
||||
; be covered by the GNU General Public License. This exception does
|
||||
; not however invalidate any other reasons why the executable file
|
||||
; might be covered by the GNU General Public License.
|
||||
;--------------------------------------------------------------------------
|
||||
|
||||
.area _CODE
|
||||
|
||||
.globl __mulint
|
||||
|
||||
__mulint:
|
||||
pop af
|
||||
pop bc
|
||||
pop de
|
||||
push de
|
||||
push bc
|
||||
push af
|
||||
|
||||
;; 16-bit multiplication
|
||||
;;
|
||||
;; Entry conditions
|
||||
;; bc = multiplicand
|
||||
;; de = multiplier
|
||||
;;
|
||||
;; Exit conditions
|
||||
;; hl = less significant word of product
|
||||
;;
|
||||
;; Register used: AF,BC,DE,HL
|
||||
__mul16::
|
||||
xor a,a
|
||||
ld l,a
|
||||
or a,b
|
||||
ld b,#16
|
||||
|
||||
;; Optimise for the case when this side has 8 bits of data or
|
||||
;; less. This is often the case with support address calls.
|
||||
jr NZ,2$
|
||||
ld b,#8
|
||||
ld a,c
|
||||
1$:
|
||||
;; Taken from z88dk, which originally borrowed from the
|
||||
;; Spectrum rom.
|
||||
add hl,hl
|
||||
2$:
|
||||
rl c
|
||||
rla ;DLE 27/11/98
|
||||
jr NC,3$
|
||||
add hl,de
|
||||
3$:
|
||||
djnz 1$
|
||||
ret
|
65
src/convert.c
Normal file
65
src/convert.c
Normal file
|
@ -0,0 +1,65 @@
|
|||
#include "convert.h"
|
||||
|
||||
uint32_t uint16_to_bcd(uint16_t value) __naked {
|
||||
value;
|
||||
|
||||
__asm
|
||||
ld iy, #2
|
||||
add iy, sp
|
||||
|
||||
ld h, 1(iy)
|
||||
ld l, 0(iy)
|
||||
|
||||
ld bc, #16*256+0
|
||||
ld de, #0
|
||||
loop:
|
||||
add hl, hl
|
||||
|
||||
ld a, e
|
||||
adc a, a
|
||||
daa
|
||||
ld e, a
|
||||
|
||||
ld a, d
|
||||
adc a, a
|
||||
daa
|
||||
ld d, a
|
||||
|
||||
ld a, c
|
||||
adc a, a
|
||||
daa
|
||||
ld c, a
|
||||
|
||||
djnz loop
|
||||
|
||||
ex de, hl
|
||||
ld e, c
|
||||
|
||||
ret
|
||||
; Bin2Bcd:
|
||||
; LD BC, 16*256+0 ; handle 16 bits, one bit per iteration
|
||||
; LD DE, 0
|
||||
; cvtLoop:
|
||||
; ADD HL, HL
|
||||
|
||||
; LD A, E
|
||||
; ADC A, A
|
||||
; DAA
|
||||
; LD E, A
|
||||
|
||||
; LD A, D
|
||||
; ADC A, A
|
||||
; DAA
|
||||
; LD D, A
|
||||
|
||||
; LD A, C
|
||||
; ADC A, A
|
||||
; DAA
|
||||
; LD C, A
|
||||
|
||||
; DJNZ cvtLoop
|
||||
|
||||
; EX HL, DE
|
||||
; RET
|
||||
__endasm;
|
||||
}
|
Loading…
Reference in New Issue
Block a user