Added multiply and convert functions, also added 32 bit int types

This commit is contained in:
Dreaded_X 2021-01-17 16:09:41 +01:00
parent 6e2ab11578
commit 7f014174b1
5 changed files with 151 additions and 4 deletions

View File

@ -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
View File

@ -0,0 +1,5 @@
#pragma once
#include "types.h"
uint32_t uint16_to_bcd(uint16_t value);

View File

@ -1,7 +1,9 @@
#pragma once
typedef signed char int8_t;
typedef short int int16_t;
typedef signed char int8_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 char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned long int uint32_t;

73
src/_mulint.s Normal file
View 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
View 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;
}