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 = \
|
||||||
src/crt0.s \
|
src/crt0.s \
|
||||||
src/bios.s \
|
src/bios.s \
|
||||||
|
src/_mulint.s \
|
||||||
src/random.c \
|
src/random.c \
|
||||||
src/console.c \
|
src/console.c \
|
||||||
|
src/convert.c \
|
||||||
|
|
||||||
OBJ_1 = $(notdir $(SRC:.c=.rel))
|
OBJ_1 = $(notdir $(SRC:.c=.rel))
|
||||||
OBJ_2 = $(notdir $(OBJ_1:.s=.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
|
#pragma once
|
||||||
|
|
||||||
typedef signed char int8_t;
|
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 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